2010-11-24 73 views
1

我想一些功能連接爲無槽類,我可以這樣做:連接沒有對象

void update() { } 

int main() 
{ 
    QTimer timer = ...; 
    QObject::connect(timer, SIGNAL(timeout()), SLOT(update())); 
    return 0; 
} 

編譯器說,如果沒有對象這是不可能的。

回答

2

AFAIK,你只能信號連接到插槽,插槽只能存在作爲Q_OBJECT的成員函數。

雖然很多人集中在模板與Qt的信號和boost ::信號或gtkmm的信號之間的差異MOC,這是我最終更關心的差異。 Qt的信號不如表達,並且導致比我想要的更多的依賴。

我仍然使用Qt,但是這只是因爲gtkmm的可訪問性是完全在Win32系統缺失。

你能做什麼,當然是讓QTimer的子類,連接到其自己的超時信號與生成,你可以連接到外部函數一個boost ::信號的插槽。儘管如此,請注意Qt中使用boost信號時的問題,但我只是使用signals2來完全避免它,並且我獲得了線程安全性。

+1

或許值得指出的是,此功能使用Qt 5引入http://developer.qt.nokia .COM /維基/ New_Signal_Slot_Syntax – leinir 2012-02-27 07:04:37

1

你需要的是Qt的認識的插槽。要做到這一點,你必須開設一門課。所以我會說不可能的。