Bootstrap

Qt基础-标准对话框(QColorDialog、QFileDialog)

Qt提高了一些常用的标准对话框,均继承自QDialog类。


颜色对话框

颜色对话框类QColorDialog可以获取指定的颜色。

头文件
#include <QColorDialog>

使用方法:

QColor clr = QColorDialog::getColor(Qt::black, this, "设置字体颜色");
if (clr.isValid())
{
...
}	

在这里插入图片描述

函数原型:

[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, 
										QWidget *parent = Q_NULLPTR, 
										const QString &title = QString(),
										ColorDialogOptions options = ColorDialogOptions())

弹出一个模态的颜色对话框,初始颜色为initial,父对象为parenttitle为对话框的标题。



文件对话框

文件对话框类QFileDialog可以选择文件或文件夹

  • 头文件
    #include <QFileDialog>

使用方法1:静态函数法

QString path = QFileDialog::getOpenFileName(this, "选择文件", "./", "项目文件(*.h *.cpp);;所有文件(*,*)");
if (!path.isEmpty())
{
	...
}

在这里插入图片描述

函数原型:

[static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR,
	 			 								const QString &caption = QString(), 
	 			 								const QString &dir = QString(), 
	 			 								const QString &filter = QString(), 
	 			 								QString *selectedFilter = Q_NULLPTR, 
	 			 								Options options = Options())

弹出一个模态的文件对话框

  • parent–父对象
  • caption–对话框的标题
  • dir–默认打开的路径,如果dir为空,则会打开上一次的位置,如果路径中包含文件名,则该文件默认被选中
  • filter–文件类型过滤器,多个过滤器之间以";;"分隔。

上述是打开文件对话框,类似的还有:

getExistingDirectory()	//获取已存在的文件夹的路径;
getOpenFileNames()		//打开多个文件;
getSaveFileName()		//保存文件对话框;

使用方法2:定义变量法

QFileDialog dlg(this);
dlg.setAcceptMode(QFileDialog::AcceptSave);		//保存模式
//dlg.setAcceptMode(QFileDialog::AcceptOpen);	//打开模式,默认

dlg.setFileMode(QFileDialog::AnyFile);			//可以选择任何文件,包括存在/不存在的
//dlg.setFileMode(QFileDialog::ExistingFile);	//单个已存在的文件
//dlg.setFileMode(QFileDialog::Directory);		//文件夹
//dlg.setFileMode(QFileDialog::ExistingFiles);	//0个或多个已存在的文件

dlg.setViewMode(QFileDialog::List);				//显示简洁模式,(Qt5.9.0不起作用)
//dlg.setViewMode(QFileDialog::Detail);			//显示详细模式,默认

QStringList filter = QStringList() << "All types(*.*)"
	<< "Normal text file(*.txt)"
	<< "C++ source file(*.h *.hh *.hpp *.hxx *.cpp *.cxx *.cc *.ino)";
dlg.setNameFilters(filter);					//过滤器
dlg.setDefaultSuffix("txt");				//默认后缀

dlg.setOption(QFileDialog::HideNameFilterDetails);	//过滤器以分号隔开,否则以空格隔开

if (dlg.exec())
{
	QStringList fileName = dlg.selectedFiles();			//选择的文件名
	QString dirPath = dlg.directory().absolutePath();	//所在文件夹的绝对路径
}

说明

  • 注意:返回的路径的分隔符为“/”,如C:/Users/zh/Desktop/1.bmp

  • getOpenFileName()返回的是含有文件名的路径,如果要获取不含文件名的路径,可使用QFileInfo类

QFileInfo fileInfo(path);
QString hPath = fileInfo.path();

另:可以获取本地的路径,如桌面、文档、下载等,参考QStandardPaths类。


字体对话框

字体对话框类QFontDialog可以获取指定的字体。

头文件
#include <QFontDialog>

使用方法:

bool ok;
QFont font = QFontDialog::getFont(&ok, QFont("宋体"), this, "选择字体");
if (ok)
{
...
}

在这里插入图片描述

函数原型:

[static] QFont QFontDialog::getFont(bool *ok, 
									const QFont &initial, 
									QWidget *parent = Q_NULLPTR, 
									const QString &title = QString(), 
									FontDialogOptions options = FontDialogOptions())

弹出一个模态的字体对话框,是否点击“OK”返回到ok中,初始字体为initial,父对象为parenttitle为对话框的标题。


输入对话框

输入对话框类QInputDialog可以输入一个数值或字符串。

头文件
#include <QInputDialog>

使用方法:

bool ok;

//输入字符串对话框
QString str = QInputDialog::getText(this, "输入字符串对话框", "输入字符串", QLineEdit::Normal, "字符串", &ok);

//输入整数对话框
int value = QInputDialog::getInt(this, "输入整数对话框", "输入整数", 10, -100, 100, 1, &ok);

//输入浮点数对话框
double dvalue = QInputDialog::getDouble(this, "输入浮点数对话框", "输入浮点数", 10.0, -99.99, 99.99, 2, &ok);

//获取列表项
QStringList items;
items << "项目1" << "项目2";
QString item = QInputDialog::getItem(this, "选择项对话框", "选择项", items, 0, false, &ok);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


消息对话框

消息对话框类QMessageBox可以提示消息。

头文件
#include <QMessageBox>

使用方法:

//关于对话框
QMessageBox::about(this, "关于软件", "此软件...");

//关于Qt对话框
QMessageBox::aboutQt(this, "关于Qt");

//问题对话框
int ret1 = QMessageBox::question(this, "问题对话框", "显示问题?");

//提示对话框
int ret2 = QMessageBox::information(this, "提示对话框", "显示提示");

//警告对话框
int ret3 = QMessageBox::warning(this, "警告对话框", "显示警告");

//错误对话框
int ret4 = QMessageBox::critical(this, "错误对话框", "显示错误");

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


进度对话框

进度对话框类QProgressDialog可以对耗时较长操作的进度提供了反馈。

头文件
#include <QProgressDialog>

使用方法:

QProgressDialog progress("当前进度", "取消", 0, 50000, this);
progress.setWindowTitle("进度对话框");
progress.show();

for (int i = 0; i < 50000;i++)
{
	progress.setValue(i);

	QCoreApplication::processEvents();	//避免界面卡死
	if (progress.wasCanceled())
	{
		break;
	}
}

progress.setValue(50000);

在这里插入图片描述

函数原型:

QProgressDialog::QProgressDialog(const QString &labelText, 
								const QString &cancelButtonText, 
								int minimum, 
								int maximum, 
								QWidget *parent = Q_NULLPTR, 
								Qt::WindowFlags f = Qt::WindowFlags())

labelText为标签内容,cancelButtonText为取消按钮的文本,minimum为最小值,maximum为最大值。


错误信息对话框

错误信息对话框类QErrorMessage可以显示错误信息。

头文件
#include <QErrorMessage>

使用方法:
定义函数的一个成员变量

QErrorMessage errordlg;

在函数体中实现

errordlg.setWindowTitle("错误信息");
errordlg.showMessage("提示错误信息");

在这里插入图片描述

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;