我有以下代码:
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 - &gt; addAction(plAct);之后是下一行)
关于我缺少的任何想法?
非常感谢。
/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * * /
/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * * /
/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * * /
编辑: 如果您在Qt,Main Windows中打开示例代码 - &gt;菜单,并添加以下代码,你应该得到相同的情况:
到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));
}
那么你应该得到同样的错误。
答案 0 :(得分:0)
制作一些断点并在调试模式下运行。 bug显示自己
答案 1 :(得分:0)
好吧,设法找到答案:
fileMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);
几乎是正确的。应该是
metricMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);
代替。