Получение результата QInputDialog :: getText () из кода C, запущенного в потоке без GUI - PullRequest
1 голос
/ 07 января 2011

Ранее я уже решал подобную проблему в этом вопросе , где я спросил, как отобразить 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().)

Что я делаю не так? Будет ли подход даже работать? Если нет, что я должен использовать?

Большое спасибо за ваш ответ.

1 Ответ

2 голосов
/ 07 января 2011

Должно работать, если вы используете QString* вместо QString&. Возможно, вам также придется зарегистрировать QString* в качестве метатипа - или, если вас это не затруднит, используйте void* вместо этого и применяйте взад и вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...