您的位置:首页 > 编程语言 > Qt开发

QT笔记4__对话框类QDialog标准对话框 下篇:QMessageBox、QProgressDialog、QErrorMessage

2019-02-12 20:45 597 查看
版权声明:本文为博主原创文章, 欢迎转载,转载请注明出处。 https://blog.csdn.net/baicaidiaozhui/article/details/87076798

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 快速入门》

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: