Mac上的Qt :: Sheet和QMessageBox :: show()

时间:2012-09-08 13:32:54

标签: c++ macos qt qmessagebox

我有一个应用程序,我想在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的连接是否有任何信号?

2 个答案:

答案 0 :(得分:5)

文档recommends使用setWindowModality()代替。以下代码适用于我:

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

答案 1 :(得分:0)

这是我的应用程序中的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