1、标准对话框
(1)Qt为开发者提供了一些可复用的对话框类型
(2)Qt提供的可复用对话框全部继承自QDialog类
@1:QMessageBox(用来提示消息的对话框) QFileDialog(文件对话框) QPrintDialog QColorDialog(用来选择一种颜色) QInputDialog QProgressDialog 这些对话框类型全部继承自QDialog类
(3)Qt中标准对话框遵循相同的使用方式
DialogType dlg(this); //先定义对话框对象,DialogType是对话框类型,this是表示当前对话框的父窗口是什么
dlg.setXXXX(XXX); //设置对话框的属性,不同的对话框类型,设置的属性是不同的
if ( dlg.exec() == DialogType::Value ) //dlg.exec(),调用exec这个成员函数(模态的方式调用),这样对话框就在屏幕上显示出来了
{
//获取对话框数据
Type v = dlg.getDialogValue();
//处理对话框数据
}
(4)消息对话框
@1:消息对话框是应用程序中最常见的界面元素
@2:消息对话框主要用于,为用户提示重要信息和强制用户进行操作选择
@3:消息对话框的使用方式
//构造消息对话框对象
QMessageBox msg(this); //this,父类就是自己,所以当前对话框做为顶层窗口
//设置消息对话框的相关属性
msg.setWindowTitle("Message Title"); //设置标题,框上面的内容
msg.setText("This is message content"); //设置提示消息,框中间的内容
msg.setIcon(QMessageBox::Information); //设置图标
msg.setStandardButtons(QMessageBox::OK | QMessageBox::Cancel); //设置按钮,一个是OK按钮,一个是Cancel按钮
if ( msg.exec() == QMessageBox::ok ) //调用exec函数,用户点击对话框中的按钮后,返回所点击的哪个按钮,如果点击的是OK,则会进入到这个if中
{
qDebug() << "ok button is chicked";
}
@4:消息对话框QMessageBox中的实用函数
--QMessageBox::question
--QMessageBox::information
--QMessageBox::warning
--QMessageBox::critical
--QMessageBox::about
(5)文件对话框
@1:文件对话框常用于一下情形
-- Open Mode 应用程序中需要用户打开一个外部的文件
-- Save Mode 应用程序中需要将当前内容存储于用户指定的外部文件中
@2:文件对话框的使用方式
QFileDialog fd(this); //定义文件对话框对象
//save mode: QFileDialog::AcceptSave //保存模式,保存模式时不需要设置文件打开一个或者多个那个属性
fd.setAcceptMode(QFileDialog::AcceptOpen); //设置文件对话框的模式,打开模式
//multi-selection: QFileDialog::ExistingFiles //设置一次可以打开多个文件
fd.setFileMode(QFileDialog::ExistingFile) //设置一次只打开一个存在的文件
if ( fd.exec() == QFileDialog::Accepted )
{
QStringList fs = fd.selectedFiles(); //selectedFiles成员函数返回用户所选择的文件,QStringList是一个链表。fs.cout()来得到这个链表中的节点数。fs[i]访问链表
//process variable fs
}
//文件对话框的模式:打开模式和保存模式,这两种模式所对应的其他设置属性也是不同的
@3:打开模式:打开模式分为两种,第一种是打开单个文件(QFileDialog::ExistingFile),第二种是同时打开多个的文件(QFileDialog::ExistingFiles)
(6)文件类型过滤器
@1:在文件对话框中可以通过文件后缀定义过滤器
@2:过滤器定义规则:
显示名(*.后缀1 *.后缀2 ... *.后缀N)
例:
"Image(*.png *.xpm *.jpg)"
"Text(*.txt)"
"All(*.*)"
@3:通过成员函数setFilter()来设置
例:dlg.setFilter("Text(*.txt)");
(7)文件对话框QFileDialog中的实用函数
@1:QFileDialog::getOpenFileName
@2: QFileDialog::getOpenFileNames
@3: QFileDialog::getSaveFileName
小结:
Qt中提供了多个可复用的对话框类型,继承于QDialog类型,遵循相同的使用方式,QMessageBox消息对话框用于提示重要的程序信息。QFileDialog文件对话框用于获取系统中的文件路径
6、颜色对话框
(1)、Qt中提供了预定义的颜色对话框QColorDialog类
(2)、QColorDialog类用于提供指定颜色的对话框部件
(3)、颜色对话框的使用方式
//构造颜色对话框对象
QColorDialog dlg(this);
//设置颜色对话框的相关属性
dlg.setWindowTitle("Color Editor");
dlg.setCurrentColor(Qt::ret); //预定义初始颜色,也可以自定义用分量来直接自定义,如dlg.setCurrentColor(QColor(100, 110, 200)); //用RGB分量来设置
if ( dlg.exec() == QColorDialog::Accepted )
{
qDebug() << dlg.selectedColor();
}
(4)、Qt中的Color类用于在程序中表示颜色的概念
(5)、QColor类同时支持多种颜色表达方式
@1:RGB:以红、绿、蓝为基准的三色模型
@2:HSV:以色调、饱和度、明度为基准的六角锥体模型
@3:CMYK:以天蓝、品红、黄色、黑为基准的全彩印刷色彩模型
(6)QColorDialog中的实用函数
--QColorDialog::getColor
7、输入对话框
(1)Qt中提供了预定义的输入对话框QInputDialog类
(2)QInputDialog类用于需要临时进行数据输入的场合
(3)输入对话框的使用方式
//构造输入对话框对象
QInputDialog dlg(this);
//设置输入对话框的相关属性
dlg.setWindowTitle("Input...");
dlg.setLabelText("Please enter a integer"); // 提示字符串
dlg.setInputMode(QInputDialog::IntInput); //表示当前的输入对话框,输入的模式是数字还是文本,这里要求对话框输入的是整形数。TextInput输入文本字符串,DoubleInput输入浮点数
dlg.setIntMinimum(0); //设置输入的整型的数,最小的范围的是0
dlg.setIntMaximum(255); //设置输入的整型的数,最大的范围的是255
if ( dlg.exec() == QInputDialog::Accepted ) //当用户点击OK时,就可以得到用户输入的数据了
{
QDebug() << dlg.intValue();
}
(4)QInputDialog中的实用函数
--QInputDialog::getDouble
--QInputDialog::getInt
--QInuptDialog::getItem
--QInputDialog::getText
8、字体对话框
(1)Qt中预定义的字体对话框QFonitDialog类
(2)QFointDialog类用于提供选择字体的对话框部件
(3)字体对话框的使用方式
//构造字体对话框对象
QFontDialog dlg(this);
//设置字体对话框的相关属性
dlg.setWindowTitle("Foint Editor");
dlg.setCurrentFont(
QFont("Courier New", 10, QFont::Bold) //初始字体,字体为Courier New这个字体,大小是10,Bold表示粗体显示
);
if ( dlg.exec() == QFontDialog::Accepted )
{
qDebug() << dlg.selectedFont(); //当用户点击OK时,得到用户最终选择的字体。
}
(4)字体对话框中的实用函数
--QFontDialog::getFont
9、进度对话框
(1)Qt中提供了预定义的进度对话框QProgressDialog类
(2)QProgressDialog类用于显示进度信息
(3)QProgressDialog类用于需要用户等待的场合
(4)进度对话框的使用方式
//构造进度对话框对象
QProgressDialog dlg(this);
//设置进度对话框的相关属性
dlg.setWindowTitle("Updating...");
dlg.setLableText("Downloading from server...."); //设置提示消息
dlg.setMinimum(0); //设置最小的进度值
dlg.setMaximum(1000); //设置最大的进度值
dlg.setValue(35); //设置当前的进度值为35,实际中可能是要根据数据的情况,我们来给这个进度值的
//实际在这个地方,还要启动一个后台的线程,用来从服务器中用来真正的下载更新,这个线程中调用setvalue这个函数,根据下载的情况来改变这个值,来达到进度条的变化
dlg.exec(); //模态的方式显示这个进度对话框
10、打印对话框
(1)Qt中提供了预定义的打印对话框QPrintDialog类
(2)QPrintDialog类用于设置打印相关的参数信息
(3)打印对话框的使用方式
//构造打印对话框对象
QPrintDialog dlg(this);
//设置打印对话框的相关属性
dlg.setWindowTitle("Print Dialog");
if ( dlg.exec() == QPrintDialog::Accepted )
{
QPrinter *p = dlg.printer(); //当用户点击打印时,跑到这句话,得到了QPrinter对象,这个是打印,就是打印的设备,但是被打印的对象还没有,这时得到的只是
//当前用户在打印对话框中选择的参数(包括打印机,大小等的参数)。将来要将被打印的对象打印到这个对象中
// use printer object to print data
QTextDocument td; //QTextDocument这个类用来表示文本文档的,这个td文本文档对象,将来作为我们打印的东西,它就是被打印的对象
//td.setPlainText("Printer object test"); //在这个文本文档的对象中写入内容
td.setHtml("<h1> Print html object test<\h1>"); //在html中,h1表示大的字体。这个文本文档的对象中写入html内容
p->setOutputFileName("D: \\test.pdf"); //设置打印的位置和名字,也就是pathname。到D盘,名字为test.pdf。用这样的方式模拟一下打印。
//来打印这个td文本文档
td.print(p); //因为这个文本文档可以被打印,所以有print函数,打印到哪里去呢,打印到p中,因为p是QPrinter的对象,它封装了打印设备的参数和接口等。将td的内容
//打印到p这个指针指向的打印设备中。
}
(4)Qt中的QPrinter类是打印设备及其参数的封装
(5)QPrinter类封装了系统中打印设备的驱动接口
(6)QPrinter以相同方式使用系统中的不同打印设备
11、小结
(1)Qt中标准对话框的设计模式
--GUI界面部件产生数据对象(比如:QColorDialog这个颜色对话框这个界面,最终会通过用户的选择得到一个QColor一个数据对象)
--业务逻辑中的其他对象使用数据对象(就是用户选择完毕后,程序中得到了一个数据对象,在Qt中的其他对象中吗,我们就去使用这个数据对象,就是业务逻辑,业务逻辑就是使用这个数据对象)
--GUI界面与业务逻辑通过数据对象连接