我有下面的代码的来源:无法识别signalmap错误
QSignalMapper* signalMapper = new QSignalMapper (this) ;
ttAct = new QAction(tr("Ttime"), this);
ttAct->setCheckable(true);
ttAct->setChecked(true);
connect(ttAct, SIGNAL(triggered()), signalMapper, SLOT(map()));
plAct = new QAction(tr("Length"), this);
plAct->setCheckable(true);
plAct->setChecked(true);
connect(plAct, SIGNAL(triggered()), signalMapper, SLOT(map()));
signalMapper->setMapping(ttAct, 0);
signalMapper->setMapping(plAct, 1);
connect (signalMapper, SIGNAL(mapped(int)), this, SLOT(enableM(int))) ;
其中enableM是
void MainWindow::enableM(int i){
qDebug() << i;
}
是一个私人插槽,只是打印。代码编译良好,但是当我尝试运行它时,它失败。
至于我可以从qDebug声明说,它无法上线
mMenu->addAction(ttAct);
(mMenu - >的addAction(plAct);是以后的下一行)
任何想法上我错过了什么?
非常感谢。
/* ** * ** * ** * ** * ** * ** * ** * ** * * * * ** * ** * ** * ** * ** * ** * */
/* ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * */
/* ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * */
编辑: 如果你打开Qt,主窗口 - >菜单中的示例代码,并添加下面的代码,你应该得到相同的情况:
要mainwindow.h: 添加
void enableM(int);
到私有槽
添加
QMenu *metricMenu;
QAction *ttAct;
QAction *plAct;
给私人。
在mainwindow中。CPP,添加
#include <QSignalMapper>
在顶部,然后添加
QSignalMapper* signalMapper = new QSignalMapper (this) ;
ttAct = new QAction(tr("Ttime"), this);
ttAct->setCheckable(true);
ttAct->setChecked(true);
connect(ttAct, SIGNAL(triggered()), signalMapper, SLOT(map()));
plAct = new QAction(tr("Length"), this);
plAct->setCheckable(true);
plAct->setChecked(true);
connect(plAct, SIGNAL(triggered()), signalMapper, SLOT(map()));
signalMapper->setMapping(ttAct, 0);
signalMapper->setMapping(plAct, 1);
connect (signalMapper, SIGNAL(mapped(int)), this, SLOT(enableM(int))) ;
到createActions()方法。
添加以下
fileMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);
到createMenus()方法。
最后添加的功能随时随地
void MainWindow::enableM(int i){
infoLabel->setText(tr("I'm alive! " + i));
}
,那么你应该得到同样的错误,我得到。
“失败”是什么意思?是什么让你认为addAction是问题?它是否存在分割或以其他方式终止,或者是没有被调用的插槽? – Mat 2011-06-17 04:49:38
我知道addAction是个问题,因为我在命令的任一侧都打印了qDebug()语句,并且它只打印了第一个。错误是因为我还没有将metricMenu添加到菜单栏。 – Chaos 2011-06-17 14:18:14