Qt连接()没有QObject或插槽
问题描述:
我知道我想要实现的是可能的,因为我可以用lambda表达式做到这一点,我之前做过(几个月前我只是不记得语法) 。基本上,我想连接一个功能的定时器/按钮/等。以促进活动的运作。Qt连接()没有QObject或插槽
这是我工作的代码:
connect(&renderTimer, &QTimer::timeout, [ = ]() {
onTimerUpdate();
});
使用拉姆达连接到插槽。我只想引用函数本身,而不是使用lambda表达式。我曾尝试插入方法onTimerUpdate()
和&onTimerUpdate
,其中没有任何工作。我不想使用QObject
或它的任何预生成的bullcrap - 我也不想在我的课程中定义插槽。我想,很简单,直接连接到我的功能。
答
这是格式连结到一个成员函数时:
connect(&renderTimer, &QTimer::timeout, this, &ArclightGLWidget::onTimerUpdate);
这是格式连结到自由功能可按时(同样为拉姆达)
connect(&renderTimer, &QTimer::timeout, onTimerUpdate);
而这是格式时连接到一个静态成员函数:
connect(&renderTimer, &QTimer::timeout, SomeType::onTimerUpdate);
答
据推测,这呼叫正在取得内部其中onTimerUpdate
是其中的一个类。如果是这样,你可以拨打:
connect(&renderTimer, &QTimer::timeout, this, &foo::onTimerUpdate);
这是最好的拉姆达因为Qt的将管理连接,而你也将能够调用sender()
在slot
。
但是,如果你是在onTimerUpdate
是你也可以使用完全一样,你已经把问题的拉姆达的方法类中:
connect(&renderTimer, &QTimer::timeout, [=](){onTimerUpdate();});
我已经试过这一点;发生以下错误:http://pastebin.com/6dpHrXkE – Krythic 2014-11-14 19:38:54
@Krythic我认为这是一个免费的功能,请参阅我的编辑。 – dtech 2014-11-14 19:42:48
工作。谢谢。 – Krythic 2014-11-14 19:44:03