【发布时间】:2012-09-21 01:37:03
【问题描述】:
首先我很抱歉这个看起来很长的问题,但事实并非如此。我正在阅读《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 的信号映射对象,并 连接的。信号映射器用于将信号源连接到 另一个信号的参数。在这个例子中,菜单的动作 窗口菜单中每个窗口对应的项目都绑定到 实际文档窗口。这些动作又连接到映射器。 当动作发出触发信号时,发送动作 已经关联到对应文档的QWidget* 窗户。此指针用作映射(QWidget*)中的参数 信号映射对象发出的信号。
我的问题:我仍然不明白什么是信号映射器类,它是如何使用的,以及在上面的示例中它的功能是什么?。任何人都可以用简单的术语解释上述段落吗?如果你能用简单的例子教我关于 mapper 类的基础知识,那就太棒了?可能是外行?
PS :当我们有 MDI 窗口时,会产生混淆(尽管操作被禁用/启用),例如假设对于一个特定文档,我们有菜单“文件/关闭”,而对于其他文档我们有“文件/重映射器”?
【问题讨论】:
-
你能详细说明你的最后一个“P.S.”吗?我没明白你在那段中的问题是什么。
-
对于每一个 Qt 问题,Qt's excellent documentation 通常是最好的起点。