Qt :: Sheet и QMessageBox :: show () на Mac

У меня есть приложение, где я хочу задать пользователю вопрос в QMessageBox и затем ответьте соответственно. Проблема в том, что на Mac я хочу, чтобы диалог отображался в виде листа, но с использованием open() Метод возвращается немедленно.

QMessageBox* msgBox = new QMessageBox(
QMessageBox::Question,
"Delete Record?",
"Are you sure you want to delete this record?"QMessageBox::Yes | QMessageBox::No,
this,
Qt::Sheet);

int ret = msgBox->exec(); // does not show up as a sheet on Mac
msgBox->open(); // shows up as a sheet but returns immediately

Могу ли я в любом случае узнать, какую кнопку пользователь нажал на листе, не выполняя свою собственную QDialog? Есть ли сигнал от msgBox Я подключаюсь?

3

Решение

Документ рекомендует с помощью setWindowModality() вместо. У меня работает следующий код:

auto m = new QMessageBox(&window);
m->setText("some text here");
m->setWindowModality(Qt::WindowModal);
m->exec();
5

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

Это пример PyQt из моего приложения, но вы получите идею:

reply = QtGui.QMessageBox.question(self, 'Delete',
"Are you sure?", QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
#some action if YES clicked
0

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