QMetaObject :: invokeMethod执行被推迟

时间:2017-10-23 15:17:10

标签: c++ qt

我的课程方法是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);
    }
}

任何想法为什么调用都在等待函数的结束? 我也尝试过使用Qt::AutoConnection

1 个答案:

答案 0 :(得分:1)

在您的示例Sleep(1000);阻止事件循环,然后无法触发插槽。

为了使其有效,有两种可能的解决方案:

  1. 使用QTimer。
  2. 每次Sleep(1000);来电之前QApplication::processEvents()。此调用将处理所有待处理事件。
  3. 有关详细信息,请阅读以下答案: https://stackoverflow.com/a/26552350/8644816