gpt4 book ai didi

c++ - 在 QWidgets 线程实例上运行 lambda 函数槽

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:11 25 4
gpt4 key购买 nike

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

关于c++ - 在 QWidgets 线程实例上运行 lambda 函数槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com