在 QWidgets 线程的实例上运行 lambda 函数槽
Running a lambda function slot on instance of a QWidgets Thread
目前我正在创建一个线程。
如果该线程想要与主线程通信以便与 GUI 交互,它会发出连接到主小部件线程上的插槽的信号。这都可以正常工作。
但是,对于此解决方案,我必须返回到原始的GUI表单并向其添加插槽。
想知道我是否可以简单地使用 lambda 函数来做到这一点。例如,在下面的示例中,类foo
在单独的线程上启动。喜欢这个
QObject::connect(this,&myclass::someSignal,
[](std::string msg)
{
QMessageBox::information(mptr,"Some title",
msg.c_str(),QMessageBox::StandardButton::Ok);
});
这给出了一个错误,即必须在 GUI 线程中创建小部件。我明白这一点。
我想知道是否有办法指定mptr
实例上运行此插槽。就像我们使用旧的Qt QObject::connect
信号槽参数一样
就像指定发送方和接收方的经典信号/时隙连接一样,您可以指定 QObject 上下文以连接到 lambda:
QObject::connect(this, &myclass::someSignal,
mptr, // Slot/lambda will be executed in this QObject's context
[](std::string msg)
{
QMessageBox::information(mptr,"Some title",
msg.c_str(),QMessageBox::StandardButton::Ok);
});
这意味着插槽/lambda将在您指定的上下文的事件循环中排队:
https://doc.qt.io/qt-5/qobject.html#connect-5
相关文章:
- 运行同一解决方案的另一个项目的项目
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- AWS Lambda C++运行时权限被拒绝
- 如何使用 SAM 在本地运行C++ AWS Lambda 函数?
- Lambda 捕获此函数和长时间运行的函数
- 析构函数在 lambda 捕获说明符中声明的类实例上运行两次
- 为什么我的全球外部lambda变量在运行时不初始化
- AWS Lambda C 在SAM中的运行时
- 在 QWidgets 线程的实例上运行 lambda 函数槽
- 如何立即运行lambda
- 运行时的C++lambda实现
- 安全地移动在访问其他成员的成员线程中运行 lambda 的对象
- Qt在主线程上运行lambda
- 如果lambda在运行时被移动/销毁,会发生什么