Я делаю некоторую работу в переопределении QThread.Время от времени я хотел бы задать пользователю вопрос Да / Нет, поэтому я планировал использовать QMessageBox :: question ().Проблема в том, что я не могу назвать это из ветки.Это не большой, я могу послать сигнал, который подключается к слоту в главном потоке GUI, который будет отображать окно сообщения, но мне также нужно, чтобы пользовательский поток блокировал и ждал, пока окно сообщения будет отклонено и получит возвратзначение (здесь QMessageBox :: StandardButton).Как мне обойти это?
РЕДАКТИРОВАТЬ: Сработает ли следующий (псевдо-) код?
class MyThread
{
public:
MyThread(QObject *parent)
{
connect(this, SIGNAL(inputRequired()), parent, SLOT(popMsgBox()), Qt::QueuedConnection);
}
void MyThread::run()
{
QMutex m;
for (...)
{
if (something)
{
m.lock();
emit inputRequired();
w.wait(&m);
m.unlock();
}
if (MyGui->ans_ == Yes) do_something();
}
}
signals:
void inputRequired();
protected:
QWaitCondition w;
};
void MyGui::popMsgBox()
{
ans_ = QMessageBox::question(this, "Question", "Yes or no?", Yes | No);
MyThread->w->wakeAll();
}