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);