2014-11-14 89 views
2

我知道我想要实现的是可能的,因为我可以用lambda表达式做到这一点,我之前做过(几个月前我只是不记得语法) 。基本上,我想连接一个功能的定时器/按钮/等。以促进活动的运作。Qt连接()没有QObject或插槽

这是我工作的代码:

connect(&renderTimer, &QTimer::timeout, [ = ]() { 
     onTimerUpdate(); 
    }); 

使用拉姆达连接到插槽。我只想引用函数本身,而不是使用lambda表达式。我曾尝试插入方法onTimerUpdate()&onTimerUpdate,其中没有任何工作。我不想使用QObject或它的任何预生成的bullcrap - 我也不想在我的课程中定义插槽。我想,很简单,直接连接到我的功能。

回答

6

这是格式连结到一个成员函数时:

connect(&renderTimer, &QTimer::timeout, this, &ArclightGLWidget::onTimerUpdate); 

这是格式连结到自由功能可按时(同样为拉姆达)

connect(&renderTimer, &QTimer::timeout, onTimerUpdate); 

而这是格式时连接到一个静态成员函数:

connect(&renderTimer, &QTimer::timeout, SomeType::onTimerUpdate); 
+0

我已经试过这一点;发生以下错误:http://pastebin.com/6dpHrXkE – Krythic 2014-11-14 19:38:54

+0

@Krythic我认为这是一个免费的功能,请参阅我的编辑。 – dtech 2014-11-14 19:42:48

+0

工作。谢谢。 – Krythic 2014-11-14 19:44:03

1

据推测,这呼叫正在取得内部其中onTimerUpdate是其中的一个类。如果是这样,你可以拨打:

connect(&renderTimer, &QTimer::timeout, this, &foo::onTimerUpdate); 

这是最好的拉姆达因为Qt的将管理连接,而你也将能够调用sender()slot

但是,如果你是在onTimerUpdate是你也可以使用完全一样,你已经把问题的拉姆达的方法类中:

connect(&renderTimer, &QTimer::timeout, [=](){onTimerUpdate();});