首页 > 代码库 > Qt中的标准对话框

Qt中的标准对话框



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界面与业务逻辑通过数据对象连接


本文出自 “whylinux” 博客,谢绝转载!

Qt中的标准对话框