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