我有一个叫QMetaObject::invokeMethod的类方法。在文档中,我看到使用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
发布于 2018-04-25 14:50:13
在您的示例中,Sleep(1000);阻塞了事件循环,因此不能触发插槽。
要使它发挥作用,有两种可能的解决方案:
Sleep(1000);调用QApplication::processEvents()之前。此调用将处理所有挂起的事件。欲了解更多信息,请阅读以下答案:https://stackoverflow.com/a/26552350/8644816
https://stackoverflow.com/questions/46892884
复制相似问题