C++ 不带QObject或插槽的Qt connect()

C++ 不带QObject或插槽的Qt connect(),c++,qt,C++,Qt,我知道我试图实现的是可能的,因为我可以用lambda表达式实现,而且我以前也做过(几个月前我只是不记得语法)。基本上,我想将一个函数连接到计时器/按钮等,以方便事件的处理 这是我的工作代码: connect( &renderTimer, &QTimer::timeout, [ = ]() { onTimerUpdate(); } ); 使用lambda连接到插槽的。我只想引用函数本身,而不是使用lambda表达式。我已尝试插入方法onTimerUpdat

我知道我试图实现的是可能的,因为我可以用lambda表达式实现,而且我以前也做过(几个月前我只是不记得语法)。基本上,我想将一个函数连接到计时器/按钮等,以方便事件的处理

这是我的工作代码:

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

使用lambda连接到插槽的。我只想引用函数本身,而不是使用lambda表达式。我已尝试插入方法
onTimerUpdate()
&onTimerUpdate
但均无效。我不想使用
QObject
或任何预先生成的废话,也不想在类中定义槽。我只想简单地将它直接连接到我的函数。

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

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

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

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

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

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

connect(&renderTimer, &QTimer::timeout, this, &foo::onTimerUpdate); 
这比lambda更可取,因为Qt将管理连接,并且您还可以在
插槽中调用
sender()

但是,如果您所在的类中
onTimerUpdate
是一种方法,那么您也可以完全按照问题中的说明使用lambda:

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

@Krythic我假设它是一个自由函数,请参阅我的编辑。您是否也会更新显示自由函数声明的答案,以便将来它可以帮助其他人?我会在2分钟内接受你的回答(需要等待)。