我遇到了非常奇怪的错误 -QAction::trigger
导致出现阻塞对话框,这导致我调用trigger
的服务器卡住(例如,在对话框关闭之前无法处理套接字信号)。
我想出了一个解决方法。我使用将信号连接void triggerWorkaround()
到插槽并发出它:QAction::trigger
Qt::QueuedConnection
QObject::connect(this, &HackClass::triggerWorkaround, targetAction_.data(), &QAction::trigger, Qt::QueuedConnection);
emit triggerWorkaround();
QObject::disconnect(this, nullptr, targetAction_.data(), nullptr);
但这是三行令人困惑的代码。有没有一种不混淆的方法来做到这一点?我发现QMetaObject::invokeMethod
,但坦率地说,这比我目前的解决方案更令人困惑 10 倍。另外,我不想将方法名称用作字符串!