4

我有一个应用程序,我想在其中向用户提出问题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

无论如何我可以得到用户在一张纸上按下的哪个按钮而不必实现我自己的QDialogmsgBox我连接有任何信号吗?

4

2 回答 2

5

该文件建议改用setWindowModality()。以下代码适用于我:

auto m = new QMessageBox(&window);
m->setText("some text here");
m->setWindowModality(Qt::WindowModal);
m->exec();
于 2012-09-08T22:45:31.907 回答
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
于 2012-09-08T14:01:00.367 回答