Qt: 如何在函数内显示消息框?

14

我正在使用Qt Nokia SDK进行开发。

当尝试在函数内显示消息框时,我遇到了显示消息框按钮的问题。如果我尝试在主窗口内显示它,则显示按钮时没有问题。

主窗口由一个包含不同小部件的QStackWidget组成。

这是在主窗口中有效的代码:

QMessageBox msgBox;
msgBox.setText("Name");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard |
                          QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();

这是我在收到网络请求响应后运行的函数和代码(消息框显示了,但按钮没有显示)。

void MainWindow::RequestReceived()
{
    QMessageBox *msgBox = new QMessageBox(this);
    msgBox->setText("Test");
    msgBox->setWindowModality(Qt::NonModal);
    msgBox->setInformativeText("Do you want to save your changes?");
    msgBox->setStandardButtons(QMessageBox::Save | QMessageBox::Discard | 
                               QMessageBox::Cancel);
    msgBox->setDefaultButton(QMessageBox::Save);
    int ret = msgBox->exec();
}

有人知道发生了什么事吗?

先谢谢了!


2
我无法重现你的问题。不应该有任何问题。你确定你没有在其他地方干扰QMessageBox吗? - Morten Kristensen
无法确定您的问题所在,但如果那是确切的代码,请确保修复内存泄漏问题。 - zkunov
@netrom: 你是否也将 QStackWidget 添加到了 MainWindow 中? - Ikky
@Ikky:我猜你是指QStackedWidget,是的,我用过,没有任何问题。 - Morten Kristensen
你可以创建一个含有父级小部件的消息框,也可以创建没有父级小部件的消息框。不确定在你的情况下是否有任何区别。 - Stephen Chu
显示剩余4条评论
3个回答

14

尝试这段代码。它会帮助你。

QMessageBox Msgbox;
    int sum;
    sum = ui->textEdit->toPlainText().toInt()+ ui->textEdit_2->toPlainText().toInt();
    Msgbox.setText("sum of numbers are...."+sum);
    Msgbox.exec();

6
也许这可以帮到您:
QMessageBox::StandardButton reply;

reply = QMessageBox::question(this, "Save", "Do you want to save your changes?",
    QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

if (reply == QMessageBox::Save) {
    qDebug() << "Yes was clicked";
    // code for saving...
}
if (reply == QMessageBox::Discard)
{
    // toDo
}
if(reply == QMessageBox::Cancel)
{
    //toDo
}

这段代码将生成以下结果:

result


1

尝试更改此行:

QMessageBox *msgBox = new QMessageBox(this);

QMessageBox *msgBox = new QMessageBox(0);

2
不设置父级是一个不好的主意,因为它会破坏窗口堆叠(这种后果在平台上有多奇怪取决于平台)。始终传递一个父级是一个好习惯。 - Frank Osterfeld
2
此外,您也无法获得基于QObject层次结构的内存管理(因此除非您手动删除,否则会出现内存泄漏)。 - Tamás Szelei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接