2011-06-16 241 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