首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QObject (),没有QObject或插槽

QObject (),没有QObject或插槽
EN

Stack Overflow用户
提问于 2014-11-14 19:32:58
回答 2查看 7.2K关注 0票数 5

我知道我想要达到的目标是可能的,因为我可以用lambda表达式来实现它,而且我已经做过了(几个月前我只是不记得语法)。基本上,我希望将一个函数连接到计时器/按钮/等等,以方便事件的工作。

这是我的工作代码:

代码语言:javascript
复制
connect( &renderTimer, &QTimer::timeout, [ = ]() {
        onTimerUpdate();
    } );

它使用lambda连接到插槽。我只想引用函数本身,而不是使用lambda表达式。我尝试过插入onTimerUpdate()&onTimerUpdate方法,但这些方法都不起作用。我不想使用QObject或其中任何一个预先生成的废话--我也不想在类中定义插槽。很简单,我想把它直接连接到我的函数上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-14 19:37:12

这是连接到成员函数时的格式:

代码语言:javascript
复制
QObject::connect(&renderTimer, &QTimer::timeout, this, &ArclightGLWidget::onTimerUpdate); 

这是连接到空闲函数(lambda相同)时的格式。

代码语言:javascript
复制
QObject::connect(&renderTimer, &QTimer::timeout, onTimerUpdate); 

这是连接到静态成员函数时的格式:

代码语言:javascript
复制
QObject::connect(&renderTimer, &QTimer::timeout, SomeType::onTimerUpdate); 
票数 15
EN

Stack Overflow用户

发布于 2014-11-14 19:47:33

这个调用大概是在onTimerUpdate是一个方法的类中进行的。如果是这样,你可以打电话:

代码语言:javascript
复制
connect(&renderTimer, &QTimer::timeout, this, &foo::onTimerUpdate); 

这比lambda更好,因为Qt将管理连接,您还可以在sender()中调用slot

但是,如果您在onTimerUpdate是一个方法的类中,您也可以使用lambda,就像您在这个问题中所做的那样:

代码语言:javascript
复制
connect( &renderTimer, &QTimer::timeout, [=](){onTimerUpdate();} );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26937517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档