在QWidgets线程的实例上运行lambda函数槽

时间:2014-03-04 17:20:21

标签: c++ qt lambda slot

目前我正在创建一个帖子 如果该线程想要与主线程通信以便与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信号槽参数

一样

1 个答案:

答案 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