第5章 基本对话框_第1页
第5章 基本对话框_第2页
第5章 基本对话框_第3页
第5章 基本对话框_第4页
第5章 基本对话框_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 基本对话框,5.1 标准文件对话框:QFileDialog类,5.2 标准颜色对话框:QColorDialog类,5.3 标准字体对话框:QFontDialog类,5.4 标准输入对话框:QInputDialog类,5.5 消息对话框:QMessageBox类,5.7 工具盒QToolBox类,5.6 自定义(Custom)消息框,5.9 QPalette类与移动图片综合实例,5.10 可扩展对话框的基本实现方法,5.11 不规则窗体,5.12 程序启动画面(QSplashScreen),5.13 多文档的创建,5.14 使用Qt Designer设计对话框,5.8 进度条(QProg

2、ressBar/QProgressDialog),5.1 标准文件对话框:QFileDialog类,5.1.1 函数说明 QFileDialog类有几个静态函数如表5.1所示,用户通过这些函数可以很方便地定制自己的文件对话框。,5.1.1 函数说明,getOpenFileName()函数返回用户选择的文件名。但是当用户在选择文件时,如果选择“取消”(Cancel),则返回一个空串。在此只详细说明getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。其函数形式如下: QString QFileDialog:getOpenFileName

3、( QWidget* parent=0, /标准文件对话框的父窗口 const QString QLineEdit *fileLineEdit; QGridLayout *mainLayout; (2) 添加private slots槽函数: void showFile(); 在开始部分添加头文件: #include #include ,5.1.2 创建步骤,(3) 在dialog.cpp文件中的构造函数中添加代码如下: fileBtn=new QPushButton; /各个控件对象的初始化 fileBtn-setText(tr(文件标准对话框实例); fileLineEdit=new QL

4、ineEdit; /用来显示选择的文件名 以及添加布局管理: mainLayout=new QGridLayout(this); /布局设计 mainLayout-addWidget(fileBtn,0,0); mainLayout-addWidget(fileLineEdit,0,1); 最后添加事件关联: connect(fileBtn,SIGNAL(clicked(),this,SLOT(showFile(); /事件关联,5.1.2 创建步骤,其中,槽函数showFile()的具体实现代码如下: void Dialog:showFile() QString s = QFileDialo

5、g:getOpenFileName(this,open file dialog,/, C+ files(*.cpp):C files(*.c):Head files(*.h); fileLineEdit-setText(s); 在dialog.cpp文件的开始部分添加头文件: #include #include #include,5.1.2 创建步骤,(4) 运行该程序后,点击“文件标准对话框实例”按钮后显示图5.2。,5.2 标准颜色对话框:QColorDialog类,5.2.1 函数说明 标准颜色对话框QColorDialog类的一个静态函数:getColor()函数返回用户选择的颜色值,

6、下面是getColor()函数形式: QColor getColor ( const QColor,5.2.2 创建步骤,下面是创建一个标准颜色对话框的详细步骤: (1) 在dialog.h中,添加private成员变量如下: QPushButton *colorBtn; QFrame *colorFrame; (2) 添加private slots槽函数: void showColor(); (3) 在dialog.cpp中,构造函数中的代码如下: colorBtn=new QPushButton; /创建各个控件的对象 colorBtn-setText(tr(颜色标准对话框实例); col

7、orFrame=new QFrame; colorFrame-setFrameShape(QFrame:Box); colorFrame-setAutoFillBackground(true);,5.2.2 创建步骤,其中QFrame的对象colorFrame是根据用户选择不同颜色更新不同的背景。 在布局管理中添加代码: mainLayout-addWidget(colorBtn,1,0); /布局设计 mainLayout-addWidget(colorFrame,1,1); 最后添加事件关联: connect(colorBtn,SIGNAL(clicked(),this,SLOT(show

8、Color(); /事件关联 其中,槽函数showColor()的实现代码如下: void Dialog:showColor() QColor c = QColorDialog:getColor(Qt:blue); if(c.isValid()/if the user cancels the dialog,it returns an invalid color colorFrame-setPalette(QPalette(c); ,5.2.2 创建步骤,(4) 在文件开始添加头文件: #include (5) 运行该程序后,单击“颜色标准对话框实例”按钮后显示如图5.3所示界面。,5.3 标准

9、字体对话框:QFontDialog类,5.3.1 函数说明 标准字体对话框QFontDialog类的一个静态函数getFont()函数,返回用户选择的字体,下面是getFont()函数形式: QFont getFont ( bool* ok, /注 QWidget* parent=0 /标准字体对话框的父窗口 );,5.3.2 创建步骤,下面是创建标准字体对话框的详细步骤: (1) 在dialog.h中,添加private成员变量如下: QPushButton *fontBtn; QLineEdit *fontLineEdit; (2) 添加private slots槽函数: void sho

10、wFont(); (3) 在dialog.cpp中,构造函数中的代码: fontBtn=new QPushButton; /创建控件的对象 fontBtn-setText(tr(字体标准对话框实例); fontLineEdit=new QLineEdit; /显示更改的字符串 fontLineEdit-setText(tr(Welcome!); 以及添加布局管理: mainLayout-addWidget(fontBtn,2,0); /布局设计 mainLayout-addWidget(fontLineEdit,2,1); 最后添加事件关联: connect(fontBtn,SIGNAL(cl

11、icked(),this,SLOT(showFont(); /事件关联,5.3.2 创建步骤,其中,槽函数showFont()的实现代码如下: void Dialog:showFont() bool ok; QFont f = QFontDialog:getFont( ,5.3.2 创建步骤,(4) 在文件开始添加头文件: #include (5) 运行该程序后,单击“字体标准对话框实例”按钮后显示如图5.4所示界面。,5.4 标准输入对话框:QInputDialog类,完成主对话框的操作过程如下: (1) 在dialog.h中,添加头文件: #include inputdlg.h。 添加pr

12、ivate成员变量如下: QPushButton *inputBtn; 添加实现标准输入对话框实例的InputDlg类: InputDlg *inputDlg; (2) 添加 private slots槽函数: void showInputDlg();,5.4 标准输入对话框:QInputDialog类,(3) 在dialog.cpp中,构造函数中的代码如下: inputBtn =new QPushButton; /创建控件的对象 inputBtn-setText(tr(标准输入对话框实例); 添加布局管理: mainLayout-addWidget(inputBtn,3,0); /布局设计

13、最后添加事件关联: connect(inputBtn,SIGNAL(clicked(),this,SLOT(showInputDlg(); /事件关联 其中,槽函数showInputDlg()的实现代码如下: void Dialog:showInputDlg() inputDlg =new InputDlg(this); inputDlg-show(); ,5.4 标准输入对话框:QInputDialog类,(4) 运行该程序后,单击“标准输入对话框实例”按钮后显示如图5.5所示。,5.4.1 标准字符串输入对话框,标准字符串输入对话框是通过QInputDialog类的静态函数getText(

14、)来完成的, getText()函数形式如下: QString getText ( QWidget* parent, /标准输入对话框的父窗口 const QString,5.4.1 标准字符串输入对话框,接着上述的程序,完成inputdlg.cpp文件中的槽函数ChangeName()的实现。具体代码如下: void InputDlg:ChangeName() bool ok; QString text=QInputDialog:getText(this,tr(标准字符串输入对话框),tr(请输入姓名:), QLineEdit:Normal,nameLabel2-text(), 在input

15、dlg.cpp文件的开头添加头文件: #include,5.4.2 标准条目选择对话框,标准条目选择对话框是通过QInputDialog类的静态函数getItem()函数完成, getItem()函数形式如下: QString getItem ( QWidget* parent, /标准输入对话框的父窗口 const QString,5.4.2 标准条目选择对话框,接着上述的程序,完成inputdlg.cpp文件中的槽函数ChangeSex()的实现。具体代码如下: void InputDlg:ChangeSex() QStringList SexItems; SexItems setText

16、(SexItem); ,5.4.3 标准int类型输入对话框,标准int类型输入对话框通过QInputDialog类的静态函数getInt()函数完成,getInt()函数形式如下: int getInt ( QWidget* parent, /标准输入对话框的父窗口 const QString,5.4.3 标准int类型输入对话框,接着上述的程序,完成inputdlg.cpp文件中的槽函数ChangeAge()的实现。具体代码如下: void InputDlg:ChangeAge() bool ok; int age = QInputDialog:getInt(this, tr(标准int类

17、型输入对话框), tr(请输入年龄:), ageLabel2-text().toInt( ,5.4.4 标准double类型输入对话框,标准double类型输入对话框通过QInputDialog类的静态函数getDouble()函数完成,getDouble()函数形式如下: double getDouble ( QWidget* parent, /标准输入对话框的父窗口 const QString,5.4.4 标准double类型输入对话框,接着上述的程序,完成inputdlg.cpp文件中槽函数ChangeScore()的实现。具体代码如下: void InputDlg:ChangeScor

18、e() bool ok; double score = QInputDialog:getDouble(this, tr(标准double类型输入对话框),tr(请输入成绩:),scoreLabel2-text().toDouble( ,5.5 消息对话框:QMessageBox类,下面是完成主对话框的操作过程: (1) 在dialog.h中,添加头文件: #include msgboxdlg.h 添加private成员变量如下: QPushButton *MsgBtn; 添加实现各种消息对话框实例的MsgBoxDlg类: MsgBoxDlg *msgDlg; (2) 添加private slo

19、ts槽函数: void showMsgDlg();,5.5 消息对话框:QMessageBox类,(3) 在dialog.cpp中,构造函数中的代码如下: MsgBtn =new QPushButton; /创建控件对象 MsgBtn-setText(tr(标准消息对话框实例); 添加布局管理: mainLayout-addWidget(MsgBtn,3,1); 最后添加事件关联: connect(MsgBtn,SIGNAL(clicked(),this,SLOT(showMsgDlg(); 其中,槽函数showMsgDlg()的实现代码如下: void Dialog:showMsgDlg()

20、 msgDlg =new MsgBoxDlg(); msgDlg-show(); ,5.5 消息对话框:QMessageBox类,(4) 运行该程序后,单击“标准消息对话框实例”按钮后,显示效果如图5.6所示。,5.5.1 Question消息框,Question消息框使用QMessageBox:question()函数完成,此函数形式如下: StandardButton QMessageBox:question ( QWidget* parent, /消息框的父窗口指针 const QString,5.5.1 Question消息框,完成文件msgboxdlg.cpp中的槽函数showQue

21、stionMsg()的具体代码如下: void MsgBoxDlg:showQuestionMsg() label-setText(tr(Question Message Box); switch(QMessageBox:question(this,tr(Question消息框), tr(您现在已经修改完成,是否要结束程序?), QMessageBox:Ok|QMessageBox:Cancel,QMessageBox:Ok) case QMessageBox:Ok: label-setText(Question button/Ok); break; case QMessageBox:Canc

22、el: label-setText(Question button/Cancel); break; default: break; return; 在msgboxdlg.cpp的开头添加头文件: #include,5.5.2 Information消息框,Information消息框使用QMessageBox:information()函数完成,函数形式如下: StandardButton QMessageBox:information ( QWidget*parent, /消息框的父窗口指针 const QString ,5.5.3 Warning消息框,Warning消息框使用QMessa

23、geBox:warning()函数完成,函数形式如下: StandardButton QMessageBox:warning ( QWidget* parent, /消息框的父窗口指针 const QString,5.5.3 Warning消息框,完成文件msgboxdlg.cpp中的槽函数showWarningMsg(),具体实现如下: void MsgBoxDlg:showWarningMsg() label-setText(tr(Warning Message Box); switch(QMessageBox:warning(this,tr(Warning消息框), tr(您修改的内容还

24、未保存,是否要保存对文档的修改?), QMessageBox:Save|QMessageBox:Discard|QMessageBox:Cancel, QMessageBox:Save) case QMessageBox:Save: label-setText(tr(Warning button/Save); break; case QMessageBox:Discard: label-setText(tr(Warning button/Discard); break; case QMessageBox:Cancel: label-setText(tr(Warning button/Cance

25、l); break; default: break; return; ,5.5.4 Critical消息框,Critical消息框使用QMessageBox:critical()函数完成,函数形式如下: StandardButton QMessageBox:critical ( QWidget* parent, /消息框的父窗口指针 const QString ,5.5.5 About消息框,About消息框使用QMessageBox:about()函数完成,函数形式如下: void QMessageBox:about ( QWidget* parent, /消息框的父窗口指针 const Q

26、String ,5.5.6 About Qt消息框,About Qt消息框使用QMessageBox: aboutQt ()函数完成,函数形式如下: void QMessageBox:aboutQt ( QWidget* parent, /消息框的父窗口指针 const QString ,5.6 自定义(Custom)消息框,下面介绍一下自定义(Custom)消息框的具体创建方法: (1) 添加该工程的提供主要显示标准消息对话框界面的函数所在的文件,在“DialogExample”项目名上单击鼠标右键,在弹出的快捷菜单中选择“Add New.”菜单项,在弹出的对话框中选择“C+ Class”选

27、项。单击“OK”按钮,弹出“C+ Class Wizard”对话框,在Base class后面的下拉列表框中输入基类名“QDialog”,在Class name后面的文本框中输入类的名称“CustomDlg”。 (2) 单击“Next”按钮,单击“Finish”按钮,在该工程中就添加了customdlg.h头文件和customdlg.cpp源文件。,5.6 自定义(Custom)消息框,(3) 打开“msgboxdlg.h”头文件,自动生成的代码如下: #include class CustomDlg : public QDialog public: CustomDlg(); ; (4) 打开

28、“msgboxdlg.cpp”文件,自动生成的代码如下: #include customdlg.h CustomDlg:CustomDlg() ,5.6 自定义(Custom)消息框,下面是完成主对话框的操作过程: (1) 在dialog.h中添加private成员变量: QPushButton *CustomBtn; QLabel *label; (2) 添加private slots槽函数: void showCustomDlg(); (3) 在dialog.cpp中的构造函数中添加如下代码: CustomBtn =new QPushButton; CustomBtn-setText(tr

29、(用户自定义消息对话框实例); label =new QLabel; label-setFrameStyle(QFrame:Panel|QFrame:Sunken); 以及添加布局管理: mainLayout-addWidget(CustomBtn,4,0); mainLayout-addWidget(label,4,1); 在Dialog构造函数的最后添加事件关联代码: connect(CustomBtn,SIGNAL(clicked(),this,SLOT(showCustomDlg(); 其中,dialog.cpp文件中的槽函数showCustomDlg()实现的具体代码。 在开始部分加

30、上头文件: #include ,5.7 工具盒QToolBox类,下面通过实现类似QQ抽屉效果来介绍QToolBox类的使用,QToolBox提供了一种列状的层叠窗体,而QToolButton提供了一种快速访问命令或选择项的按钮,通常在工具条中使用。详细内容见代码CH502,运行效果如图5.8所示。,5.7 工具盒QToolBox类,(1) 建立一个空工程。单击“File”-“New File or Project.”,在弹出的对话框中选择Projects组下的“Empty Qt4 Project”,单击“OK”按钮。 (2) 在弹出的对话框中对该工程进行命名并选择保存的路径,这里命名为 “M

31、yQQExample”。单击“Next”按钮,最后单击“Finish”按钮,完成该文件工程的建立。 (3) 下面添加该工程的提供主要显示界面的函数所在的文件,在“MyQQExample”项目名上单击鼠标右键,在弹出的快捷菜单中选择“Add New.”菜单项,在弹出的对话框中选择“C+ Class”选项。单击“OK”按钮,弹出“C+ Class Wizard”对话框,在Base class后面的下拉列表框中输入基类名“QToolBox”(手工添加),在Class name后面的文本框中输入类的名称“Drawer”。 (4) 单击“Next”按钮,单击“Finish”按钮,添加drawer.h头文

32、件和drawer.cpp源文件。,5.7 工具盒QToolBox类,(5) Drawer类继承自QToolBox类,打开“drawer.h”头文件,定义实例中需要用到的各种窗体控件。具体代码如下: #include #include class Drawer : public QToolBox Q_OBJECT public: Drawer(QWidget *parent=0,Qt:WindowFlags f=0); private: QToolButton *toolBtn1_1; QToolButton *toolBtn1_2; QToolButton *toolBtn1_3; QTool

33、Button *toolBtn1_4; QToolButton *toolBtn1_5; QToolButton *toolBtn2_1; QToolButton *toolBtn2_2; QToolButton *toolBtn3_1; QToolButton *toolBtn3_2; ;,5.7 工具盒QToolBox类,(6) 打开“drawer.cpp”文件,添加代码。 (7) 在“drawer.cpp”文件一开始加入以下头文件: #include #include (8) 下面添加该工程的入口函数所在的文件(main.cpp文件),在“MyQQExample”项目名上单击鼠标右键,在

34、弹出的快捷菜单中选择“Add New.”菜单项,在弹出的对话框中选择“C+ Source File”选项,单击“OK”按钮,弹出“New C+ Source File”对话框,在name后面的文本框中输入“main.cpp”。单击“Next”按钮,单击“Finish”按钮,添加main函数。,5.7 工具盒QToolBox类,(9) 打开“main.cpp”文件,添加以下代码: #include #include drawer.h #include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:set

35、CodecForTr(QTextCodec:codecForLocale(); /显示中文 Drawer drawer; drawer.show(); return a.exec(); (10) 编译运行此程序,此时未看到加载的图片,是因为图片放置的路径不是默认的,只要将所用到的图片放置到该工程下的debug文件夹下即可。最后运行一下程序,显示效果如图5.8所示。,5.8 进度条(QProgressBar/QProgressDialog),Qt提供了两种显示进度条的方式,一种是QprogressBar(如图5.9所示),提供了一种横向或纵向显示进度的控件表示方式,用来描述任务的完成情况;另一种

36、是QProgressDialog(如图5.10所示),提供了一种针对慢速过程的进度对话框表示方式,用于描述任务完成的进度情况。,5.8 进度条(QProgressBar/QProgressDialog),具体实现步骤如下: (1) 建立一个工程。单击“File”-“New File or Project.”,在弹出的对话框中选择Projects组下的“Qt4 Gui Application”,单击“OK”按钮。 (2) 在弹出的对话框中对该工程进行命名并选择保存工程的路径,这里将工程命名(Name)为Progress,单击“Next”按钮,再次单击“Next”按钮。在“Class name”后

37、面的文本框中输入ProgressDlg,在基类“Base class”后面的下拉列表框中选择“QDialog”选项,取消“Generate form”复选框的选中状态,单击“Next”按钮,最后单击“Finish”按钮,完成该文件工程的建立。,5.8 进度条(QProgressBar/QProgressDialog),(3) ProgressDlg类继承自QDialog类,打开“progressdlg.h”头文件,添加如下加黑代码: /添加的头文件 #include #include #include #include #include #include class ProgressDlg :

38、 public QDialog Q_OBJECT public: ProgressDlg(QWidget *parent = 0); private slots: void startProgress(); private: QLabel *FileNum; QLineEdit *FileNumLineEdit; QLabel *ProgressType; QComboBox *comboBox; QProgressBar *progressBar; QPushButton *starBtn; QGridLayout *mainLayout; ;,5.8 进度条(QProgressBar/QP

39、rogressDialog),(4) 构造函数主要完成主界面的初始化工作,包括各控件的创建、布局以及信号/槽的连接。打开“progressdlg.cpp”文件,添加代码。 其中,槽函数startProgress()的具体代码。 (5) 打开“main.cpp”文件,添加以下加黑代码以显示中文: #include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); ProgressDlg w; w.show(); retur

40、n a.exec(); (6) 运行程序,查看显示效果。,5.9 QPalette类与移动图片综合实例,5.9.1 QPalette类 介绍一下QPalette类的使用方法,该类有两个基本的概念,一个是ColorGroup,另一个是ColorRole。其中,ColorGroup指的是以下3种不同的状态: QPalette:Active:获得焦点的状态; QPalette:Inactive:未获得焦点的状态; QPalette:Disable:不可用状态。 ColorRole指的是颜色主题,即对窗体中不同部位颜色的分类。例如:QPalette:Window是指背景色,QPalette:Windo

41、wText指的是前景色等等。 QPalette类使用最多,最重要的函数是setColor()函数,其原型如下: void QPalette:setColor(ColorGroup group,ColorRole role,const QColor ,5.9.1 QPalette类,只对某个主题的颜色进行设置,并不区分状态。 QPalette类同时还提供了setBrush()函数,通过画刷的设置来对显示进行更改,这样就有可能使用图片而不仅是单一的颜色来对主题进行填充了。Qt之前版本中有关背景色设置的函数如setBackgroundColor()或前景色设置的函数如setForegroundCol

42、or()在Qt4中都被废止,统一由QPalette类进行管理。如setBackgroundColor()函数可由以下语句代替: xxx-setAutoFillBackground(true); QPalette p = xxx-palette(); p.setColor(QPalette:Window,color);/p.setBrush(QPalette:Window,brush); xxx-setPalette(p);,5.9.2 QTime类,QTime的currentTime()函数获取当前的系统时间;QTime的toString()函数把获取的当前时间转换成字符串类型。为便于显示,t

43、oString()函数的参数需指定转换后时间的显示格式。 H/h:小时(若使用H表示小时,则无论何时都以24小时制显示小时;若使用h表示小时,则当同时指定AM/PM时,采用12小时制显示小时,其他情况下仍采用24小时制进行显示)。 m:分钟。 s:秒钟。 AP/A:显示AM或PM。 Ap/a:显示am或pm。,5.10 可扩展对话框的基本实现方法,可扩展对话框的基本实现方法即是利用setSizeConstraint(QLayout:SetFixedSize)方法使对话框尺寸保持相对固定。其中,最关键的部分有以下两点: 在整个对话框的构造函数中调用。 layout-setSizeConstrai

44、nt(QLayout:SetFixedSize); 这个设置保证了对话框的尺寸保持相对固定,始终是各控件组合的默认尺寸,在扩展部分显示时,对话框尺寸根据需要显示的控件进行扩展调整,而在扩展部分隐藏时,对话框尺寸又恢复至初始状态。 切换按钮的实现。整个窗体可扩展的工作都是在此按钮所连接的槽函数中完成。,5.10 可扩展对话框的基本实现方法,下面通过一个简单的填写资料的例子介绍具体做法,通常情况下,只需填写姓名和性别,在有特殊需要时,还需填写更多信息时则切换至完整对话窗体,具体实现代码见CH506,运行效果如图5.12所示。,5.10 可扩展对话框的基本实现方法,具体实现步骤如下: (1) 建立一

45、个工程。单击“File”-“New File or Project.”,在弹出的对话框中选择Projects组下的“Qt4 Gui Application”,单击“OK”按钮。 (2) 在弹出的对话框中对该工程进行命名并选择保存工程的路径,这里将工程命名(Name)为ExtensionDlg,单击“Next”按钮,再次单击“Next”按钮,在“Class name”后面的文本框中输入ExtensionDlg,在基类“Base class”后面的下拉列表框中选择“QDialog”选项,取消“Generate form”复选框的选中状态,单击“Next”按钮,最后单击“Finish”按钮,完成该文

46、件工程的建立。,5.10 可扩展对话框的基本实现方法,(3) ExtensionDlg类继承自QDialog,打开“extensiondlg.h”头文件,具体代码如下: #include class ExtensionDlg : public QDialog Q_OBJECT public: ExtensionDlg(QWidget *parent = 0); private slots: void showDetailInfo(); private: void createBaseInfo(); /实现基本对话窗体部分 void createDetailInfo(); /实现扩展窗体部分 Q

47、Widget *baseWidget; /基本对话窗体部分 QWidget *detailWidget; /扩展窗体部分 ;,5.10 可扩展对话框的基本实现方法,(4) 打开“extensiondlg.cpp”文件,添加以下代码: #include #include #include #include #include #include #include ExtensionDlg:ExtensionDlg(QWidget *parent) : QDialog(parent) setWindowTitle(tr(Extension Dialog); createBaseInfo(); crea

48、teDetailInfo(); QVBoxLayout *layout =new QVBoxLayout(this); /布局 layout-addWidget(baseWidget); layout-addWidget(detailWidget); layout-setSizeConstraint(QLayout:SetFixedSize); layout-setSpacing(10); ,5.10 可扩展对话框的基本实现方法,(5) 为显示中文,在main.cpp文件中添加以下加黑代码: #include #include extensiondlg.h #include int main(

49、int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); ExtensionDlg w; w.show(); return a.exec(); (6) 运行程序,查看显示效果。,5.11 不规则窗体,下面通过一个实例介绍不规则窗体的实现方法,此实例实现了一个蝴蝶图形外沿形状的不规则形状对话框,也可以在不规则窗体上放置按钮等控件,可以通过鼠标左键拖动窗体,鼠标右键关闭窗体。具体代码见CH507,运行效果如图5.13所示。,5.11 不规则窗体,具体

50、实现步骤如下: (1) 建立一个工程。单击“File”-“New File or Project.”,在弹出的对话框中选择Projects组下的“Qt4 Gui Application”,单击“OK”按钮。 (2) 在弹出的对话框中对该工程进行命名并选择保存工程的路径。这里将工程命名(Name)为ShapeWidget,单击“Next”按钮,再次单击“Next”按钮,在“Class name”后面的文本框中输入ShapeWidget,在基类“Base class”后面的下拉列表框中选择“QWidget”选项,取消“Generate form”复选框的选中状态,单击“Next”按钮,最后单击“F

51、inish”按钮,完成该文件工程的建立。,5.11 不规则窗体,(3) 不规则窗体类ShapeWidget继承自QWidget类,为了使不规则窗体能用鼠标随意拖动,在该类中重定义了鼠标事件mousePressEvent()、mouseMoveEvent()以及绘制函数paintEvent(),打开“shapewidget.h”头文件,添加如下代码: class ShapeWidget : public QWidget Q_OBJECT public: ShapeWidget(QWidget *parent = 0); protected: void mousePressEvent(QMouse

52、Event *); void mouseMoveEvent(QMouseEvent *); void paintEvent(QPaintEvent *); private: QPoint dragPosition; ;,5.11 不规则窗体,(4) 打开“shapewidget.cpp”文件,ShapeWidget的构造函数部分是实现不规则窗体的关键,添加的具体代码如下: /添加的头文件 #include #include #include #include ShapeWidget:ShapeWidget(QWidget *parent) : QWidget(parent) QPixmap p

53、ix; pix.load(16.png,0,Qt:AvoidDither|Qt:ThresholdDither|Qt:ThresholdAlphaDither); resize(pix.size(); setMask(QBitmap(pix.mask(); ,5.12 程序启动画面(QSplashScreen),当运行程序时,在显示屏的中央出现一个启动画面,经过一段时间,应用程序完成初始化工作后,启动画面隐去,出现程序的主窗口界面。 具体实现方法如下: (1) 建立一个工程。单击“File”-“New File or Project.”,在弹出的对话框中选择Projects组下的“Qt4 Gu

54、i Application”,单击“OK”按钮。 (2) 在弹出的对话框中对该工程进行命名并选择保存工程的路径,在这里将工程命名(Name)为 SplashSreen,单击“Next”按钮,再次单击“Next”按钮,在“Class name”后面的文本框中输入MainWindow,在基类“Base class”后面的下拉列表框中选择“QMainWindow”选项。取消“Generate form”复选框的选中状态,单击“Next”按钮,最后单击“Finish”按钮,完成该文件工程的建立。,5.12 程序启动画面(QSplashScreen),(3) 主窗体MainWindow类继承自QMain

55、Window类,模拟一个程序的启动,打开“mainwindow.h”头文件,自动生成代码如下: #include class MainWindow : public QMainWindow Q_OBJECT public: MainWindow(QWidget *parent = 0); ;,5.12 程序启动画面(QSplashScreen),(4) 打开“mainwindow.cpp”文件,添加如下代码: /添加的头文件 #include #include MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent) setWin

56、dowTitle(Splash Example); QTextEdit *edit=new QTextEdit; edit-setText(Splash Example!); setCentralWidget(edit); resize(600,450); Sleep(1000); ,5.12 程序启动画面(QSplashScreen),(5) 启动画面主要在main()函数中实现,打开“main.cpp”文本,添加以下加黑代码: #include #include mainwindow.h #include #include int main(int argc, char *argv) QApplication a(argc, argv); QPixmap pixmap(4.1.png); QSplashScreen splash(pixmap); splash.show(); cessEvents(); MainWindow w; w.show(); splash.finish( ,5.13 多文档的创建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论