首先,我为看起来很大的问题道歉,但事实并非如此。我正在阅读《qt 开发基础》一书,在阅读第四章时,作者通过展示以下示例讲述了 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 的信号映射对象。信号映射器用于将信号源与另一个信号的参数联系起来。在本例中,Window 菜单中每个窗口对应的菜单项的操作与实际的文档窗口相关联。这些动作又连接到映射器。当动作发出触发信号时,发送动作已经与对应文档窗口的QWidget*相关联。该指针用作信号映射对象发出的 mapped(QWidget*) 信号中的参数。
我的问题:我仍然不明白什么是信号映射器类,它是如何使用的以及在上面的示例中它的功能是什么?任何人都可以用简单的术语解释上述段落吗?如果你能用简单的例子教我关于映射器类的基础知识,那会很棒吗?可能用外行的话?
PS:一个困惑是当我们有 MDI 窗口时,菜单是否更改(尽管操作被禁用/启用)例如假设对于一个特定文档我们有菜单“文件/关闭”而对于其他文档我们有“文件/重映射器”?