Debugging Can';无法识别信号映射错误的来源

Debugging Can';无法识别信号映射错误的来源,debugging,qt,visual-c++,signals,Debugging,Qt,Visual C++,Signals,我有以下代码: 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

我有以下代码:

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))) ;
启用在哪里

void MainWindow::enableM(int i){
    qDebug() << i;
}
(mMenu-->addAction(plAct);是其后的下一行)

你知道我遗漏了什么吗

非常感谢

/*********************************************************************/

/*********************************************************************/

/*********************************************************************/

编辑: 如果您在Qt、主窗口->菜单中打开示例代码,并添加以下代码,您应该会遇到相同的情况:

到mainwindow.h: 加

到专用插槽

私人的

在mainwindow.cpp中,添加

#include <QSignalMapper>
到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));
}

然后您应该会得到与我相同的错误。

设置一些断点并在调试模式下运行。
bug出现了

很好,找到了答案:

fileMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);
这几乎是正确的。应该是

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

相反。

不幸的是,我正在qt中运行msvc2008编译器,而且我还没有设置调试以与visual studio一起使用,因此无法访问它…所以请修复它。。。如果没有调试器,您将如何进行开发。给我们看更多的代码。也就是说,直到“崩溃点”为止,好的,我已经准确地添加了如何获得上面的错误。我通过qDebug()语句确定我的大多数错误在哪里,并用这种方式修复它们……你说的“它失败”是什么意思?是什么让你认为addAction是个问题?是segfaulting还是以其他方式终止,还是插槽没有被调用?我知道addAction是个问题,因为我在命令的任一侧打印了qDebug()语句,而它只打印了第一个语句。错误是因为我尚未将metricMenu添加到菜单栏。
fileMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);
void MainWindow::enableM(int i){
    infoLabel->setText(tr("I'm alive! " + i));
}
fileMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);
metricMenu = menuBar()->addMenu(tr("&Metrics"));
metricMenu->addAction(ttAct);
metricMenu->addAction(plAct);