QT实验十一对话框实验.docx
- 文档编号:27169469
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:22
- 大小:28.91KB
QT实验十一对话框实验.docx
《QT实验十一对话框实验.docx》由会员分享,可在线阅读,更多相关《QT实验十一对话框实验.docx(22页珍藏版)》请在冰豆网上搜索。
QT实验十一对话框实验
对话框实验
(一)Qt提供的内建对话框类说明:
●颜色对话框QColorDialog,能够允许用户选择颜色。
●错误消息框QErrorMessage,显示错误信息。
●文件对话框QFileDialog,能够允许用户选择一个或者多个文件以及目录。
●字体对话框QFontDialog,允许用户选择/设置字体。
●输入对话框QInputDialog,允许用户进行简单的输入。
●页设置对话框QPageSetupDialog,配置与页相关的打印机选项。
●进度对话框QProgressDialog,指示一个长时间操作的工作进度,以提示用户该操作是否已经停滞。
●打印对话框QPrintDialog,配置打印机。
(二)使用内建对话框
(1)建立名为“builtin”的QTGUI工程,并建立(重新命名)类CBuiltinDlg定义和实现文件(主要是三个文件:
builtindlg.h、builtindlg.cpp、builtin.cpp)。
(2)自定义的内建对话框类CBuiltinDlg的头文件builtindlg.h,内容如下。
#ifndef_BUILTINDLG_H_
#define_BUILTINDLG_H_
#include
classQTextEdit;
classQPushButton;
classCBuiltinDlg:
publicQDialog
{
Q_OBJECT
public:
CBuiltinDlg(QWidget*=0);
virtual~CBuiltinDlg(){}
private:
QTextEdit*displayTextEdit;
QPushButton*colorPushBtn;
QPushButton*errorPushBtn;
QPushButton*filePushBtn;
QPushButton*fontPushBtn;
QPushButton*inputPushBtn;
QPushButton*pagePushBtn;
QPushButton*progressPushBtn;
QPushButton*printPushBtn;
privateslots:
voiddoPushBtn();
};
#endif
在类CBuiltinDlg的私有区,声明了一个文本编辑框,用来存放显示实例的文本信息;接下来,声明了控制Qt内建对话框显示的QPushButton按钮对象,共7个。
私有槽函数doPushBtn()响应QPushButton按钮对象的单击操作信号clicked()。
(3)接下来,看一下自定义的内建对话框类的实现文件。
builtindlg.cpp:
#include
#include"builtindlg.h"
CBuiltinDlg:
:
CBuiltinDlg(QWidget*parent)
:
QDialog(parent)
{
displayTextEdit=newQTextEdit(tr("Qt的标准通用对话框。
"));
QGridLayout*gridLayout=newQGridLayout;
colorPushBtn=newQPushButton(tr("颜色对话框"));
errorPushBtn=newQPushButton(tr("错误信息框"));
filePushBtn=newQPushButton(tr("文件对话框"));
fontPushBtn=newQPushButton(tr("字体对话框"));
inputPushBtn=newQPushButton(tr("输入对话框"));
pagePushBtn=newQPushButton(tr("页设置对话框"));
progressPushBtn=newQPushButton(tr("进度对话框"));
printPushBtn=newQPushButton(tr("打印对话框"));
gridLayout->addWidget(colorPushBtn,0,0,1,1);
gridLayout->addWidget(errorPushBtn,0,1,1,1);
gridLayout->addWidget(filePushBtn,0,2,1,1);
gridLayout->addWidget(fontPushBtn,1,0,1,1);
gridLayout->addWidget(inputPushBtn,1,1,1,1);
gridLayout->addWidget(pagePushBtn,1,2,1,1);
gridLayout->addWidget(progressPushBtn,2,0,1,1);
gridLayout->addWidget(printPushBtn,2,1,1,1);
gridLayout->addWidget(displayTextEdit,3,0,3,3);
setLayout(gridLayout);
connect(colorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(errorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(filePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(fontPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(inputPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(pagePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(progressPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(printPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
setWindowTitle(tr("內建对话框"));
resize(400,300);
}
voidCBuiltinDlg:
:
doPushBtn()
{
QPushButton*btn=qobject_cast
if(btn==colorPushBtn)
{//颜色对话框.
QPalettepalette=displayTextEdit->palette();
constQColor&color
=QColorDialog:
:
getColor(palette.color(QPalette:
:
Base),this);
if(color.isValid())
{
palette.setColor(QPalette:
:
Base,color);
displayTextEdit->setPalette(palette);
}
}
elseif(btn==errorPushBtn)
{//错误信息框.
QErrorMessagebox(this);
box.setWindowTitle(tr("错误信息框"));
box.showMessage(tr("错误信息框实例xx。
"));
box.showMessage(tr("错误信息框实例xx。
"));
box.showMessage(tr("错误信息框实例xx。
"));
box.showMessage(tr("错误信息框实例yy。
"));
box.showMessage(tr("错误信息框实例zz。
"));
box.exec();
}
elseif(btn==filePushBtn)
{//文件对话框.
QStringfileName=QFileDialog:
:
getOpenFileName(this,
tr("打开文件"),
"/usr/local/Trolltech",
tr("任何文件(*.*)"
";;文本文件(*.txt)"
";;XML文件(*.xml)"));
displayTextEdit->setText(fileName);
}
elseif(btn==fontPushBtn)
{//字体对话框.
boolok;
constQFont&font=QFontDialog:
:
getFont(&ok,
displayTextEdit->font(),
this,
tr("字体对话框"));
if(ok)
{//如果<确定>,设置字体.
displayTextEdit->setFont(font);
}
}
elseif(btn==inputPushBtn)
{//输入对话框.
boolok;
QStringtext=QInputDialog:
:
getText(this,
tr("输入对话框"),
tr("输入文本:
"),
QLineEdit:
:
Normal,
QDir:
:
home().dirName(),
&ok);
if(ok&&!
text.isEmpty())
displayTextEdit->setText(text);
}
elseif(btn==pagePushBtn)
{//页设置对话框.
QPrinterprinter;
QPageSetupDialogdlg(&printer,this);
dlg.setWindowTitle(tr("页设置对话框"));
if(dlg.exec()==QDialog:
:
Accepted)
{
//进行下一步的处理。
}
}
elseif(btn==progressPushBtn)
{//进度对话框.
QProgressDialogprogress(tr("正在复制文件..."),tr("取消"),0,10000,this);
progress.setWindowModality(Qt:
:
WindowModal);
progress.setWindowTitle(tr("进度对话框"));
progress.show();
for(inti=0;i<10000;i++)
{
progress.setValue(i);
qApp->processEvents();
if(progress.wasCanceled())
break;
//...复制文件处理。
qDebug()<
}
progress.setValue(10000);
}
elseif(btn==printPushBtn)
{//打印对话框.
QPrinterprinter;
QPrintDialogdlg(&printer,this);
dlg.setWindowTitle(tr("打印对话框"));
if(dlg.exec()==QDialog:
:
Accepted)
{
//进行下一步的处理。
}
}
}
主程序builtin.cpp:
#include
#include"builtindlg.h"
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QTextCodec:
:
setCodecForTr(QTextCodec:
:
codecForName("gb18030"));
CBuiltinDlgdlg;
returndlg.exec();
}
程序分析:
首先builtindlg.cpp将必要的头文件包含进来
#include
#include"builtindlg.h"
下面是内建对话框类CBuiltinDlg的构造函数。
CBuiltinDlg:
:
CBuiltinDlg(QWidget*parent)
:
QDialog(parent)
{
displayTextEdit=newQTextEdit(tr("Qt的标准通用对话框。
"));
创建一个显示内容为“Qt的标准通用对话框。
”的文本编辑框QTextEdit对象,该文本编辑框将在演示Qt的各种内建对话框时用到。
QGridLayout*gridLayout=newQGridLayout;
colorPushBtn=newQPushButton(tr("颜色对话框"));
errorPushBtn=newQPushButton(tr("错误消息框"));
filePushBtn=newQPushButton(tr("文件对话框"));
fontPushBtn=newQPushButton(tr("字体对话框"));
inputPushBtn=newQPushButton(tr("输入对话框"));
pagePushBtn=newQPushButton(tr("页设置对话框"));
progressPushBtn=newQPushButton(tr("进度对话框"));
printPushBtn=newQPushButton(tr("打印对话框"));
gridLayout->addWidget(colorPushBtn,0,0,1,1);
gridLayout->addWidget(errorPushBtn,0,1,1,1);
gridLayout->addWidget(filePushBtn,0,2,1,1);
gridLayout->addWidget(fontPushBtn,1,0,1,1);
gridLayout->addWidget(inputPushBtn,1,1,1,1);
gridLayout->addWidget(pagePushBtn,1,2,1,1);
gridLayout->addWidget(progressPushBtn,2,0,1,1);
gridLayout->addWidget(printPushBtn,2,1,1,1);
gridLayout->addWidget(displayTextEdit,3,0,3,3);
setLayout(gridLayout);
创建一个网格布局管理器QGridLayout对象,gridLayout布局管理器将会管理和排布所有的窗口部件。
接下来,创建7个QPushButton对象,这些对象分别用来控制颜色对话框、错误消息框、文件对话框、字体对话框、输入对话框、页设置对话框、进度对话框和打印对话框的创建和显示。
然后调用QGridLayout:
:
addWidget()函数,将所有的QPushButton以及QTextEdit窗口部件排布在网格布局管理器gridLayout中。
最后,函数QDialog:
:
setLayout()将网格布局管理器gridLayout设置为内建对话框CBuiltinDlg对象的顶层布局管理器。
connect(colorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(errorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(filePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(fontPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(inputPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(pagePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(progressPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
connect(printPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
将所有的QPushButton对象的clicked()信号关联到内建对话框类CBuiltinDlg的槽函数doPushButton(),即所有QPushButton对象的单击操作都由统一的槽函数doPushButton()来处理。
setWindowTitle(tr("内建对话框"));
resize(400,300);
}
函数QDialog:
:
setWindowTitle()设置对话框的标题为“内建对话框”。
最后,调用函数QDialog:
:
resize()改变对话框的大小尺寸。
下面,看一下槽函数doPushBtn(),它接收并处理所有的QpushButton按钮的单击信号clicked()。
voidCBuiltinDlg:
:
doPushBtn()
{
QPushButton*btn=qobject_cast
if(btn==colorPushBtn)
{//颜色对话框.
QPalettepalette=displayTextEdit->palette();
constQcolor&color=
QColorDialog:
:
getColor(palette.color(QPalette:
:
Base),this);
if(color.isValid())
{
palette.setColor(QPalette:
:
Base,color);
displayTextEdit->setPalette(palette);
}
}
槽函数的开头,首先是获取发送信号的QPushButton对象的指针。
函数QOjbect:
:
sender()返回发送信号的对象的指针,返回类型为QObject*。
模板函数
Tqobject_cast(QObject*object)
完成类型的转换,将
接下来是if()条件判断语句,判断发送信号的对象是否是相应的QPushButton对象(colorBtn、errorPushBtn等),如果是则创建相应的Qt内建对话框并进行显示;否则将会跳过该段代码,直到找到条件为true的if()条件语句。
上面这段代码是颜色对话框的例子,它的功能是利用Qt内建的颜色对话框QColorDialog类获取用户选择的颜色,然后设置文本编辑框的背景色。
函数QTextEdit:
:
palette()获取文本编辑框对象displayTextEdit的调色板。
接下来,调用QColorDialog:
:
getColor()函数创建并显示一个模态的颜色对话框,并返回用户选择的颜色对象的常量引用(对临时对象的引用是无效的,必须使用常量引用)赋给变量color;如果用户单击“取消”按钮,颜色对话框将返回一个无效的颜色;颜色对话框的颜色初始化为palette.color(QPalette:
:
Base),即文本编辑框的背景色;父窗口部件为this。
QColor:
:
isValid()函数判断颜色对话框返回的颜色是否有效。
如果颜色对话框返回的颜色是有效的,函数QPalette:
:
setColor()设置调色板的背景颜色为颜色对话框返回的颜色。
此处的QPalette:
:
setColor()函数具有2个参数,第1个参数QPalette:
:
Base指定了调色板的角色,告诉程序应该设置调色板的所有三个颜色组中的哪一个角色的颜色(该函数将会影响到所有的三个颜色组);第2个参数color指定应该设置的颜色。
最后,函数QtextEdit:
:
setPalette()重新设置文本编辑框的调色板。
(三)自定义对话框
QDialog是所有Qt对话框窗口的基类,它继承自Qwidge。
根据Qt提供的QDialog基类建立一个自定义的对话框类。
建立新类
首先,建立名字为“mydialog”的QTGUI工程。
工程文件包含文件主要是三个:
logindlg.h、logindlg.cpp、mydialog.cpp)。
(1)logindlg.h:
#ifndef_LOGINDLG_H_
#define_LOGINDLG_H_
#include
classQLineEdit;
classCLoginDlg:
publicQDialog
{
Q_OBJECT
public:
CLoginDlg(QWidget*=0);
virtual~CLoginDlg();
publicslots:
virtualvoidaccept();
private:
QLineEdit*usrLineEdit;
QLineEdit*pwdLineEdit;
};
#endif
分析程序代码:
logindlg.h
#ifndef_LOGINDLG_H_
#define_LOGINDLG_H_
定义宏变量,确保该头文件只被包含一次,防止头文件被多次包含。
#include
classCLoginDlg:
publicQDialog
{
Q_OBJECT
public:
CLoginDlg(QWidget*=0);
};
#endif
自定义类CLoginDlg继承自QDialog,因此必须包含基类QDialog的定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT 实验 十一 对话框