常见五个标准对话框QMessageBox的使用

QMessageBox::information常用

  • 第一个参数parent,说明它的父组件
  • 第二个参数title,也就是对话框的标题
  • 第三个参数text,是对话框显示的内容
  • 第四个参数buttons,声明对话框放置的按钮,默认是只放置一个OK按钮,这个参数可以使用或运算,例如我们希望有一个Yes和一个No的按钮,可以使用QMessageBox::Yes | QMessageBox::No,所有的按钮类型可以在QMessageBox声明的StandarButton枚举中找到
  • 第五个参数defaultButton就是默认选中的按钮,默认值是NoButton,也就是哪个按钮都不选中。
1
2
QMessageBox::information(NULL, "Title", "Content",
                        QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

Qt提供了五个类似的标准对话框

  • 最后一个about()函数是没有button设置的按钮
1
2
3
4
5
6
7
8
9
10
QMessageBox::critical(NULL, "critical", "Content",
                        QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

QMessageBox::warning(NULL, "warning", "Content",
                        QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

QMessageBox::question(NULL, "question", "Content",
                        QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

QMessageBox::about(NULL, "About", "About this application");

自定义图标的MessageBox

  • 这里我们使用的是exec()函数,而不是show(),因为这是一个模态对话框,需要有它自己的事件循环,否则的话,我们的对话框会一闪而过
1
2
3
QMessageBox message(QMessageBox::NoIcon, "Title", "Content with icon.");
message.setIconPixmap(QPixmap(":/image/icon.png"));
message.exec();

处理对话框的交互

  • static函数都是要返回一个StandardButton,我们就可以通过判断这个返回值来对用户的操作做出相应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
QMessageBox::StandardButton button= QMessageBox::question(NULL, "Show Qt",
                        "Do you want to show Qt dialog?",
                         QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if(button == QMessageBox::Yes) {
        QMessageBox::aboutQt(NULL, "About Qt");
}

//如果是自定义的对话框
QMessageBox message(QMessageBox::NoIcon, "Show Qt",
                        "Do you want to show Qt dialog?",
                        QMessageBox::Yes | QMessageBox::No, NULL);
if(message.exec() == QMessageBox::Yes) {
        QMessageBox::aboutQt(NULL, "About Qt");
}