QT笔记4__对话框类QDialog标准对话框 下篇:QMessageBox、QProgressDialog、QErrorMessage
QT笔记4__对话框类QDialog标准对话框 下篇:QMessageBox、QProgressDialog、QErrorMessage
关于Qt中QDialog的标准对话框,之前已经介绍了颜色、文件选择、字体、输入对话框四种标准对话框,本篇主要讲解消息、进度、错误信息三种对话框的基本使用,而关于向导对话框相关介绍,如果本人之后有更深的理解将会进行详细介绍。
一、消息对话框
颜色对话框由QMessageBox类提供,因此需要头文件中需要包含#include<QMessageBox>。消息色对话框可以通过调用静态函数和创建对象两种形式实现。消息对话框一般包括关于对话框、信息对话框、问题对话框、警告对话框、严重错误对话框五种类型,创建对象方式实现代码如下:
void QDialoglearn::on_pushButtonMessageBox_clicked() { //创建对象 QMessageBox myMesBox; //关于对话框,关于对话框没有返回值; myMesBox.about(this, QString::fromLocal8Bit("关于对话框"),\ QString::fromLocal8Bit("易码码的Qt大坑")); //信息对话框 int ret=myMesBox.information(this, QString::fromLocal8Bit("信息对话框"), \ QString::fromLocal8Bit("文艺不灭,二逼永存!"),QMessageBox::Yes); if (ret == QMessageBox::Yes) { ui.labelDebug->setText(QString::number(ret)); } //问题对话框 ret = myMesBox.question(this, QString::fromLocal8Bit("问题对话框")\, QString::fromLocal8Bit("lena,写代码文艺吗!"), QMessageBox::Yes, \ QMessageBox::Yes, QMessageBox::Yes); if (ret == QMessageBox::Yes) { ui.labelDebug->setText(QString::number(ret)); } //警告对话框 ret = myMesBox.warning(this, QString::fromLocal8Bit("警告对话框"), \ QString::fromLocal8Bit("警告:你已经犯二!为避免电脑中毒将自动关闭电脑!"),\ QMessageBox::Yes, QMessageBox::No); if (ret == QMessageBox::No) { ui.labelDebug->setText(QString::number(ret)); } //严重错误对话框 ret = myMesBox.critical(this, QString::fromLocal8Bit("严重错误对话框"),\ QString::fromLocal8Bit("严重错误提示:糟糕,电脑自动无法关闭,请手动拔电源!"),\ QMessageBox::Yes, QMessageBox::YesToAll); if (ret == QMessageBox::Yes || ret == QMessageBox::YesToAll) { myMesBox.about(this, QString::fromLocal8Bit("关于对话框"), \ QString::fromLocal8Bit("说话算话呀,谁不拔电源谁是光头强!")); } }
以上不同类型的对话框所调用的函数基本包含四个参数:父窗口指针,标题栏,显示信息,拥有的按钮。代码实现效果如下:
五种消息对话框中除了关于对话框没有返回值之外,其余四种均有返回值,返回值与有选择按钮相关由QMessageBox::StandardButton枚举类型指定,可根据返回值的不同选择执行对应的代码。其中QT中:StandardButton枚举的定义如下:
enum StandardButton { // keep this in sync with QDialogButtonBox::StandardButton and QPlatformDialogHelper::StandardButton NoButton = 0x00000000, Ok = 0x00000400, Save = 0x00000800, SaveAll = 0x00001000, Open = 0x00002000, Yes = 0x00004000, YesToAll = 0x00008000, No = 0x00010000, NoToAll = 0x00020000, Abort = 0x00040000, Retry = 0x00080000, Ignore = 0x00100000, Close = 0x00200000, Cancel = 0x00400000, Discard = 0x00800000, Help = 0x01000000, Apply = 0x02000000, Reset = 0x04000000, RestoreDefaults = 0x08000000, FirstButton = Ok, // internal LastButton = RestoreDefaults, // internal YesAll = YesToAll, // obsolete NoAll = NoToAll, // obsolete Default = 0x00000100, // obsolete Escape = 0x00000200, // obsolete FlagMask = 0x00000300, // obsolete ButtonMask = ~FlagMask // obsolete };
二、进度对话框
错误对话框由QProgressDialog类提供,因此需要头文件中需要包含#include<QProgressDialog>。进度对话框可以通过创建对象形式实现。
void QDialoglearn::on_pushButtonProgress_clicked() { int maxVal = 50000; //1、利用构造函数进行初始化参数 //QProgressDialog myProgressDlg( QString::fromLocal8Bit("光头强砍树进度"), QString::fromLocal8Bit("取消"),0,maxVal,this); //2、利用成员函数设置窗口参数; QProgressDialog myProgressDlg; myProgressDlg.setLabelText(QString::fromLocal8Bit("光头强砍树进度")); myProgressDlg.setMinimum(0); myProgressDlg.setMaximum(maxVal); //myProgressDlg.exec();//模态显示,阻塞代码和界面,不可用; myProgressDlg.setModal(true); //设置为模态对话框,阻塞界面但不阻塞代码; //或者采用myProgressDlg.setWindowModality(Qt::ApplicationModal); myProgressDlg.show(); int i = 0; int maxVal1 = maxVal + 1; for (i; i < (maxVal1); ++i) { myProgressDlg.setValue(i); QCoreApplication::processEvents(); if (myProgressDlg.wasCanceled()) break; } if (i<maxVal) { QMessageBox::about(this, QString::fromLocal8Bit("警告!"),\ QString::fromLocal8Bit("光头强快砍树!")); } else { QMessageBox::about(this, QString::fromLocal8Bit("恭喜!"), \ QString::fromLocal8Bit("恭喜小强砍树完成!")); } }
注意代码中进度对话框模态和非模态的设置;代码中的QCoreApplication::processEvents();是为了避免长时间的操作导致用户界面冻结;
以上代码调用如下对话框,并根据是否取消进度弹出不同的消息提示对话框:
除QProgressDialog外,QProgressBar类提供进度条部件的设置;
三、错误对话框
错误对话框由QErrorMessage类提供,因此需要头文件中需要包含#include<QErrorMessage>。错误对话框可以通过创建对象形式实现。
void QDialoglearn::on_pushButtonErrorMessage_clicked() { QErrorMessage* myerrorDlg=new QErrorMessage(this); myerrorDlg->setWindowTitle(QString::fromLocal8Bit("错误信息对话框")); //显示非模态对话框; myerrorDlg->showMessage(QString::fromLocal8Bit("出现XXXX错误,请找开发人员回炉重造!")); }
代码调用错误对话框如下:
错误对话框中哟一个默认的show this message again 的复选框,可以选择是否提示相同的错误。但如果要确保该复选框生效请确保错误对话框对象为全局变量。以上代码中 myerrorDlg为局部变量,因此复选框无效。
四、参考资料
1、《Qt creater 快速入门》
- QtCreator 对话框(二)QMessageBox(消息对话框),QProgressDialog (进度对话框),QErrorMessage(错误信息对话框),QWizardPage(向导对话框)
- Qt QColorDialog QErrorMessage QFileDialog QFontDialog QProgressDialog 等对话框的使用测试
- Qt标准对话框之进度对话框(QProgressDialog)
- Qt标准对话框之QMessageBox
- 【Qt笔记】标准对话框--向导对话框
- Qt学习之路(17): Qt标准对话框之QMessageBox
- Qt学习之路(17): Qt标准对话框之QMessageBox
- Qt 之路 (16)—标准对话框之QColorDialog
- Qt标准对话框之QMessageBox
- 【Qt笔记】标准对话框--消息对话框
- qt学习笔记:Qt标准对话框之QInputDialog
- QT中进度对话框(QProgressDialog)
- Qt学习之路(18): Qt标准对话框之QInputDialog
- QT 标准对话框-QMessageBox
- Qt标准对话框之输入对话框(QInputDialog)
- 【Qt开发】Qt标准对话框之QMessageBox
- 【Qt笔记】标准对话框--文件对话框
- Qt中常见对话框的使用/QMessageBox/QFontDialog/QFileDialog
- Qt学习之路(17): Qt标准对话框之QMessageBox
- 【Qt笔记】标准对话框--进度对话框、错误信息对话框