Qt connect()没有QObject或插槽

问题描述 投票:2回答:2

我知道我想要实现的是可能的,因为我可以用lambda表达式来完成它,之前我已经完成了它(几个月前我只是不记得语法)。基本上,我想将一个函数连接到一个计时器/按钮/等。促进活动的运作。

这是我的工作代码:

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

这使用lambda连接到插槽。我想只引用函数本身而不是使用lambda表达式。我试过插入方法onTimerUpdate()&onTimerUpdate没有一个工作。我不想使用QObject或其中任何预先生成的bullcrap - 我也不想在我的班级中定义插槽。我想简单地将它直接连接到我的函数。

c++ qt
2个回答
10
投票

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

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

这是连接到自由函数时的格式(对于lambda也是如此)

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

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

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

1
投票

据推测,这个调用是在onTimerUpdate是一种方法的类中进行的。如果是这样,你可以致电:

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

这比lambda更可取,因为Qt将管理连接,你也可以在sender()中调用slot

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

connect( &renderTimer, &QTimer::timeout, [=](){onTimerUpdate();} );
© www.soinside.com 2019 - 2024. All rights reserved.