目前我正在创建一个帖子
如果该线程想要与主线程通信以便与GUI交互,它会发出连接到主小部件线程上的插槽的信号。这一切都很好。
但是对于这个解决方案,我必须回到我原来的GUI表单并添加插槽。
我想知道我是否可以使用lambda函数简单地完成此操作。
例如,在以下示例中,类foo
在单独的线程上启动。喜欢这个
QObject::connect(this,&myclass::someSignal,
[](std::string msg)
{
QMessageBox::information(mptr,"Some title",
msg.c_str(),QMessageBox::StandardButton::Ok);
});
这给出了必须在GUI线程中创建Widget的错误。我理解这一点。
我想知道是否有办法让我指定在mptr
实例上运行此广告位。就像我们使用旧的Qt QObject::connect
信号槽参数
答案 0 :(得分:0)
就像指定发送方和接收方的经典信号/插槽连接一样,您可以指定连接到lambda的QObject上下文:
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);
});
意味着slot / lambda将在您指定的 context 的事件循环中排队:
https://doc.qt.io/qt-5/qobject.html#connect-5