Qt connect() without QObject or slots

Qt connect() without QObject or slots

本文关键字:QObject or slots without connect Qt      更新时间:2023-10-16

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

这是我的工作代码:

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

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

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

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

这是连接到自由函数时的格式(与lambda相同)

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

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

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

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

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

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

但是,如果您属于onTimerUpdate是方法的类,您也可以完全按照您在问题中提出的方式使用 lambda:

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