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