2011-06-16 199 views
0

我有下面的代码的来源:无法识别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)); 
} 

,那么你应该得到同样的错误,我得到。

+0

“失败”是什么意思?是什么让你认为addAction是问题?它是否存在分割或以其他方式终止,或者是没有被调用的插槽? – Mat 2011-06-17 04:49:38

+0

我知道addAction是个问题,因为我在命令的任一侧都打印了qDebug()语句,并且它只打印了第一个。错误是因为我还没有将metricMenu添加到菜单栏。 – Chaos 2011-06-17 14:18:14

回答

0

好了,好不容易才找到了答案:

fileMenu = menuBar()->addMenu(tr("&Metrics")); 
metricMenu->addAction(ttAct); 
metricMenu->addAction(plAct); 

只是几乎是正确的。应该是

metricMenu = menuBar()->addMenu(tr("&Metrics")); 
metricMenu->addAction(ttAct); 
metricMenu->addAction(plAct); 

改为。

0

创建一些断点并在调试模式下运行。 错误展会本身

+0

不幸的是,我在qt中运行msvc2008编译器,而且我还没有设置调试以使用visual studio,因此无法访问它... – Chaos 2011-06-16 20:17:38

+0

因此修复它...您不想没有调试器开发。向我们展示更多代码。 I.e的一切,直到“崩溃点” – 2011-06-16 21:49:26

+0

好吧,我已经添加到如何得到上述错误。我通过qDebug()语句确定我的大部分错误,并通过这种方式修复它们。 – Chaos 2011-06-16 22:14:21