2012-09-16 37 views
0

我正在嘗試使用Qt進行IHM,並且我開始製作基本菜單(文件,編輯...)。 到目前爲止,我有我的菜單包含「文件」,然後顯示「新項目,打開項目,退出」。 看起來不錯,但我的問題是我似乎無法觸發這些操作(點擊它們或按快捷鍵)。QAction不會連接到我的插槽

這裏是我的槽:

void KoriganEngine::launchNewProjectWidget(){ 
    //External QWidget 
    m_nwProj = new NewProjectWidget(NULL,Qt::MSWindowsFixedSizeDialogHint); 
    m_nwProj->show(); 
} 

如果我使用這個插槽與連接的按鈕,正確顯示我的新的QWidget。 然而,不可能做同樣的事情用一個動作......

這是我的動作和菜單的代碼:

void KoriganEngine::KG_createMenus(){ 
//init actions 
KG_createMenuActions(); 

//add menu to the bar 
m_fileMenu = menuBar()->addMenu("File"); 
m_fileMenu->addAction(m_newProjAction); 
m_fileMenu->addAction(m_openProjAction); 
m_fileMenu->addSeparator(); 
m_fileMenu->addAction(m_quitAction); 

m_editMenu = menuBar()->addMenu("Edit"); 

}

void KoriganEngine::KG_createMenuActions(){ 
m_newProjAction = new QAction("New Project...", this); 
m_newProjAction->setShortcuts(QKeySequence::New); 
m_newProjAction->setStatusTip(QString("Create a new Project")); 
connect(m_newProjAction, SIGNAL(trigerred()), this, SLOT(slottest())); 

m_openProjAction = new QAction("Open Project...", this); 
m_openProjAction->setShortcuts(QKeySequence::Open); 
m_openProjAction->activate(QAction::Hover); 
connect(m_openProjAction, SIGNAL(trigerred()), this, SLOT(launchNewProjectWidget())); //TODO replace the slots 

m_quitAction = new QAction("Exit", this); 
connect(m_quitAction, SIGNAL(trigerred()), this, SLOT(quit())); 

}

而且與按鈕配合使用的代碼:

connect(m_button, SIGNAL(clicked()), this, SLOT(launchNewProjectWidget())); 

所以我真的不明白爲什麼它不應該有同樣的反應,我一遍又一遍地讀了Qt的例子......我一定錯過了一些東西,但如果有人作爲一個想法,我會超過感激,因爲它開始讓我討厭生活:p

謝謝大家。

PS:好吧,不知道我處理巨大的代碼塊樓內設有商務,在我的防守是很奇怪的使用...:P

回答

5

您在觸發字犯了一個錯誤:P它應該是:

connect(m_quitAction, SIGNAL(triggered()), this, SLOT(quit())); 
           ------ 

觸發,而不是trigerred! :)

+0

謝謝,我只是注意到,我很慚愧,我因爲拼寫問題而失去了幾個小時......無論如何謝謝 – Crumble

0

如果我得到這個權利,你的問題是m_openProjAction-> activate(QAction :: Hover);這導致QAction發出徘徊()而不是被觸發();

+0

你是不對的。這個功能只是發出信號,沒有設置它。 – Blood

+0

我想到了,但這不是問題。以上是真實的解釋。無論如何謝謝 – Crumble

+0

是的,沒有注意到錯誤,所以尋找一些真正的編碼錯誤,你應該使用附近的控制檯運行qt應用程序,這樣當信號或插槽無法連接時出現警告 – xception