Qt:当你在一个函数内时如何显示一个Messagebox?

Ikk*_*kky 9 c++ qt messagebox button

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

在尝试在函数中显示消息框时,我无法显示MessageBox的按钮.如果我尝试在主窗口中显示它,显示按钮没有问题.

主窗口包含一个包含不同小部件的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();
Run Code Online (Sandbox Code Playgroud)

这是我在收到来自Web请求的响应后运行的函数和代码(消息框显示,但不显示按钮.

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();
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道发生了什么?

提前致谢!

小智 12

试试这个代码.它会帮助你.

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


Eli*_*ias 5

也许这会有所帮助:

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
}
Run Code Online (Sandbox Code Playgroud)

此代码将产生以下内容:

结果


Muh*_*ser 1

尝试改变这一行:

QMessageBox *msgBox = new QMessageBox(this);
Run Code Online (Sandbox Code Playgroud)

QMessageBox *msgBox = new QMessageBox(0);
Run Code Online (Sandbox Code Playgroud)

  • 不设置父级永远不是一个好主意,因为它会破坏窗口堆叠(其后果有多奇怪取决于平台)。总是通过父母也是一个很好的做法。 (2认同)
  • 另外,您无法获得基于 QObject 层次结构的内存管理(因此除非您手动删除,否则它会泄漏)。 (2认同)