まず第一に、見栄えのする質問で申し訳ありませんが、実際にはそうではありません。Foundation of qt development book を読んでいて、第 4 章を読みながら、著者は次の例を示して MDI ウィンドウの基本を説明しています。
MdiWindow::MdiWindow( QWidget *parent ) : QMainWindow( parent ) {
setWindowTitle( tr( "MDI" ) );
QWorkspace* workspace = new QWorkspace;
setCentralWidget( workspace );
connect( workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(enableActions()));
QSignalMapper* mapper = new QSignalMapper( this );
//my problem is in this line
connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );
createActions();
createMenus();
createToolbars();
statusBar()->showMessage( tr("Done") );
enableActions();
}
彼の説明のパラグラフは完全に私を避けました(それを理解するのに問題があるのは私ですか、それとも他の人ですか?):
次に、QSignalMapper というシグナル マッピング オブジェクトを作成して接続します。シグナル マッパーは、シグナルのソースを別のシグナルの引数に結び付けるために使用されます。この例では、[ウィンドウ] メニューの各ウィンドウに対応するメニュー項目のアクションが、実際のドキュメント ウィンドウに関連付けられています。アクションはマッパーに接続されます。トリガーされたシグナルがアクションによって発行されると、送信アクションは対応するドキュメント ウィンドウの QWidget* に関連付けられています。このポインターは、シグナル マッピング オブジェクトによって発行されるマップされた (QWidget*) シグナルの引数として使用されます。
私の質問:シグナルマッパークラスとは何か、それがどのように使用され、上記の例でどのような機能を果たしているのか、まだわかりませんか?. 上記のパラグラフを簡単な用語を使って説明してもらえますか? また、マッパークラスの基本を簡単な例で教えていただければ幸いです。おそらく素人の言葉で?
PS : MDI ウィンドウがあり、メニューの変更を行うと混乱します (アクションは無効/有効になります)。たとえば、ある特定のドキュメントには「ファイル/閉じる」メニューがあり、他のドキュメントには「ファイル/リマッパー」があるとします。