2011-12-30 75 views
0

這是在Menu類中。問題是addAction。這工作,但目前還插槽沒有聯繫「:前‘’令牌預期基本表達式錯誤:」QtMenubar呼叫槽

QMenu* menu2 = new QMenu("Test"); 
menu2->addAction("Test"); 

當我這樣做:

QMenu* menu2 = new QMenu("Test"); 
menu2->addAction("Test", Menu, test); 

我得到編譯器錯誤

我的意思是在Menu類中調用test()函數。我究竟做錯了什麼?

回答

2

那麼,錯誤來自傳遞Menu作爲一個參數。你說Menu是一個類,而類本身不是表達式。

如果您需要致電testMenu一個實例,其中Menu是不是從QObject(即無可用插槽)一個衍生物,那麼你可以創建一個包含QMenu本身的部件插槽(可能是QMainWindow),並在那裏實施呼叫!

編輯:添加一個例子。現在

class MainWindow : public QMainWindow { 
    Q_OBJECT 
// Usual declarations... 

private slots: 
    void myCustomSlot(); 
}; 

,說你填充它的構造內部的主窗口:

MainWindow::MainWindow(...) { 
    // Some initialization code 

    QMenu *menu2 = new QMenu("Test"); 
    menu2->addAction("Test", this, SLOT(myCustomSlot)); 
    // Some more initialization code 
} 

// ... 

void MainWindow::myCustomSlot() { 
    instanceOfMenu->test(); 
} 

當然,如果你正在創建一個類的外部菜單,你需要做的插槽公開,但這是另一個問題

+0

我該如何做到這一點? 「那麼你可以在包含QMenu本身的小部件中創建一個插槽(可能是一個QMainWindow),並在那裏實現調用」 – 2011-12-30 02:27:48

+0

假設你的主窗口小部件是一個'QMainWindow',那麼你需要繼承'QMainWindow '變成像'class MyQMainWindow:public QMainWindow {Q_OBJECT ... blahblah ...}'這樣的東西。您將自定義插槽添加到該類,然後使您的主窗口小部件成爲「MyQMainWindow」的實例而不是「QMainWindow」。這在Qt中是相當標準的東西:) - 你可能已經在做它了! – 2011-12-30 02:46:52

+0

添加了一些示例代碼,使其更加清晰:) – 2011-12-30 03:03:07