QMessageBox消失了

时间:2016-04-13 09:20:48

标签: c++ qt qt5

我正在尝试通过在lambda函数中调用其QMessageBox函数来显示show,如下所示:

connect(ui->graphButton, &QAbstractButton::clicked, [](void){
        QMessageBox message;
        message.setText(tr("Graphing button clicked"));
        message.show();
});

但是,点击graphButton后,QMessageBox窗口只会在消失前暂时显示。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

message.exec();

执行它。

完整代码:

connect(ui->graphButton, &QAbstractButton::clicked, [](void){
        QMessageBox message;
        message.setText(tr("Graphing button clicked"));
        message.exec();
});

show仅设置窗口小部件的可见性状态:http://doc.qt.io/qt-4.8/qwidget.html#show http://doc.qt.io/qt-4.8/qwidget.html#visible-prop exec具有所需的行为http://doc.qt.io/qt-5/qmessagebox.html#exec

您无需使用show,因为它是默认的可见性。禁用窗口小部件的可见性时再次启用它时使用它。

答案 1 :(得分:-1)

使用QMessageBox.setModal将消息框设置为" Modal"模式(即,它阻止执行直到它完成工作),然后使用"打开"显示消息框的方法。

connect(ui->graphButton, &QAbstractButton::clicked, [](void){
    QMessageBox message;
    message.setText(tr("Graphing button clicked"));
    message.setModal(true);
    message.open( ... );
});