этот ответ
лкнулся с довольно странной ошибкой -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 раз более запутанно, чем мое текущее решение. Также,Я не хочу использовать имя метода в качестве строки!