我有下面的代碼的來源:無法識別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