Qt connect() without QObject or slots
Qt connect() without QObject or slots
我知道我想要实现的是可能的,因为我可以使用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();} );
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 删除 QSharedPointer 指向的 QObject
- 模式"allocate memory or use existing data"
- N-API include an .so or dll
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- QObject::连接无法将信号连接到*this*对象的插槽
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 我如何将 OR 与 if 语句一起使用字符串
- 将 if 语句中的字符与 or 进行比较
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- "No such file or directory" C++标头问题
- 处理 std::enable_if<...中谓词的逻辑"OR">
- C++ 虽然语句不适用于字符串和"or"
- Qt connect() without QObject or slots