Будет ли QMessageBox блокировать запуск всего основного потока в Qt?

Я новичок в Qt

Моя ситуация такова: по какой-то причине я должен послать сигнал сердцебиения из основного потока, в то же время я хотел бы создать окно QMessageBox, используя:

reply = QMessageBox::question(this, tr("Sure want to quit?"), tr("Sure quit?"), QMessageBox::Yes|QMessageBox::No);

Я просто хочу, чтобы это окно сообщения блокировало ввод пользователя из других окон, но я не хочу блокировать сигнал сердцебиения.
Как мне это сделать? Или это сделано по умолчанию в Qt?

0

Решение

QMessageBox :: question внутренне выполняет цикл обработки событий. Так что все продолжается. Вам не нужно беспокоиться об этом.

Однако вы можете получить странные эффекты, используя такие функции. Например. если ваше сердцебиение может открыть диалоговое окно, то диалоговое окно также будет открыто, даже если уже открыто другое диалоговое окно.
Также представьте, что у вас работает стек TCP / IP. Все, что может сделать этот стек, будет продолжать происходить … где бы ни выполнялся QMessageBox :: question () … как в середине какой-то функции.

Вот почему в нашей компании есть политика, которая запрещает использовать QMessageBox :: question () (и аналогичные) и вызывать exec () для диалогов в наших приложениях. Мы создаем модальные диалоги в куче и используем вместо них их сигналы.

3

Другие решения


По вопросам рекламы [email protected]