Ранее я уже решал подобную проблему в этом вопросе , где я спросил, как отобразить QMessageBox из потока не-GUI в Qt, выполняющем код на языке C.
Решение, которое мне предложили, использовать сигналы и слоты и Qt :: QueuedConnection для подключения сигнала, который может быть передан кодом C, вызывающим функцию C ++, которая, в свою очередь, вызывает метод C ++ моего главного окна GUI, которое затем испустил сигнал, отлично работает для QMessageBoxes.
Однако теперь мне также нужно иметь возможность запрашивать ввод у пользователя из QInputDialog, из кода C, работающего в потоке без GUI.
Я думал об использовании следующего кода слота и того же принципа, описанного выше:
void MyWidget::prompt_slot(QString str, QString &answer)
{
answer = QInputDialog::getText(0, "", str);
}
и Qt :: BlockingQueuedConnection, так что слот изменяет ссылку на строку, к которой я затем могу получить доступ из кода C.
К сожалению, я получаю следующую ошибку во время выполнения:
QObject::connect: Cannot queue arguments of type 'QString&'
(Make sure 'QString&' is registered using qRegisterMetaType().)
Что я делаю не так? Будет ли подход даже работать? Если нет, что я должен использовать?
Большое спасибо за ваш ответ.