У меня есть приложение, где я хочу задать пользователю вопрос в 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
Я подключаюсь?
Документ рекомендует с помощью setWindowModality()
вместо. У меня работает следующий код:
auto m = new QMessageBox(&window);
m->setText("some text here");
m->setWindowModality(Qt::WindowModal);
m->exec();
Это пример 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