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

版权声明:本文为博主原创文章, 欢迎转载,转载请注明出处。 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 快速入门》

猜你喜欢

转载自blog.csdn.net/baicaidiaozhui/article/details/87076798