gpt4 book ai didi

c++ - QMetaObject::invokeMethod 执行被推迟

转载 作者:行者123 更新时间:2023-11-28 04:57:11 24 4
gpt4 key购买 nike

我的类中有一个方法调用QMetaObject::invokeMethod。来自documentation我读到使用 Qt::DirectConnection 应该立即调用插槽。在我的代码中,我似乎体验到插槽仅在我的方法执行结束时被调用。因此,我尝试在 invokeMethod 和函数结束之间进行长时间休眠,并且我确实看到在休眠时间结束时正在执行的槽。

void myTest(){
QMetaObject::invokeMethod(obj, "MyMethod",
                          Qt::DirectConnection,
                          Q_ARG(QString, myString));
for(int j=0;j<10;j++)
{
        qDebug() << "j: "<< j;
        Sleep(1000);
}
}

知道为什么 invoke 正在等待函数结束吗?我也尝试过使用 Qt::AutoConnection

最佳答案

在您的示例中,Sleep(1000); 阻塞了事件循环,因此插槽无法被触发。

要使其正常工作,有 2 种可能的解决方案:

  1. 使用 QTimer。
  2. 在每次 Sleep(1000); 之前调用 QApplication::processEvents()。此调用将处理所有未决事件。

有关更多信息,您可以阅读此答案: https://stackoverflow.com/a/26552350/8644816

关于c++ - QMetaObject::invokeMethod 执行被推迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892884/

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