2014-02-11 32 views
2

爲什麼我不能連接動作來調用函數,如果觸發? 我以爲我已經理解了根據這個source 的語法,它聲明可以直接調用一個函數。Qt5 C++連接觸發QAction到一個成員函數

void Traymenu::createMainContextMenu(){ 
    QAction *actionNewNote = mainContextMenu.addAction("Test Func"); 

    QObject::connect(actionNewNote,QAction::triggered,Traymenu::testFunc); 

    mainIcon.setContextMenu(&mainContextMenu); 

} 

void Traymenu::testFunc(){ 
    printf("test func"); 
} 

錯誤:invalid use of non-static member function 'void QAction::triggered(bool)

         ^

回答

5

您需要將指針傳遞給函數爲connect。您還需要在一個指針傳遞給接收對象:

QObject::connect(actionNewNote, &QAction::triggered, this, &Traymenu::testFunc); 

注意「&」之前QAction::triggered

+0

好吧,我會試試看。接收對象:你讀過鏈接了嗎?你也可以直接命名一個沒有「this」的函數,據我所知 – user2366975

+0

是的,你可以直接命名一個函數。但是,如果函數是一個成員函數,你必須使用'tr1 :: bind',或者像上面所做的那樣傳遞一個指向接收者的指針。僅僅傳遞一個指向成員函數的指針是不夠的。 –