我的课程方法是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
答案 0 :(得分:1)
在您的示例Sleep(1000);
阻止事件循环,然后无法触发插槽。
为了使其有效,有两种可能的解决方案:
Sleep(1000);
来电之前QApplication::processEvents()
。此调用将处理所有待处理事件。有关详细信息,请阅读以下答案: https://stackoverflow.com/a/26552350/8644816