2010-11-24 69 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的认识的插槽。要做到这一点,你必须开设一门课。所以我会说不可能的。