Qt 6.2C++程序设计与桌面应用开发 思政课件 第5章 对话框设计_第1页
Qt 6.2C++程序设计与桌面应用开发 思政课件 第5章 对话框设计_第2页
Qt 6.2C++程序设计与桌面应用开发 思政课件 第5章 对话框设计_第3页
Qt 6.2C++程序设计与桌面应用开发 思政课件 第5章 对话框设计_第4页
Qt 6.2C++程序设计与桌面应用开发 思政课件 第5章 对话框设计_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

Qt6.2/C++程序设计与桌面应用开发21世纪高等学校计算机类课程创新规划教材–微课视频版教材目录第1章初识Qt框架第2章Qt开发基础第3章界面设计组件第4章主框架窗口第5章对话框设计第6章事件系统第7章文件与数据库第8章模型/视图结构第9章图形绘制第10章多媒体编程第11章网络编程第12章进程与线程教材目录第5章对话框设计5.1相关Qt类5.2自定义对话框5.3标准对话框5.4其他Qt窗体5.1相关Qt类对话框是GUI应用程序中不可或缺的界面组件,它一般以顶层窗口的形式出现在程序的最上层,用于实现短期任务或者简洁的用户交互。Qt中的对话框由QDialog类或其子类表示,可以通过它们或其派生类来创建自定义的对话框,也可以直接使用Qt预定义的标准对话框。5.1.1QDialog类QDialog是Qt对话框的基类,它继承自QWidget类。所以,对话框也是属于Qt窗体中的一种类型。QDialog类的使用非常简单,下面是对话框的示例。5.1.2QDialogButtonBox类QDialogButtonBox类用于表示对话框上的按钮框,它会以适合当前窗口样式的布局来显示按钮。QDialogButtonBox类继承自QWidget类,其部分成员函数及功能如表5.2所示。QDialogButtonBox类的使用非常简单,先构造一个QDialogButtonBox对象,然后调用其成员函数完成相应功能即可,运行效果如图5.1所示。5.2自定义对话框Qt中的对话框分为模态对话框和非模态对话框。模态对话框,就是运行时会阻塞同一应用程序中其他窗口的输入的对话框。非模态对话框,用户可以在运行该对话框的同时继续进行程序的其他操作。5.2.1模态对话框Qt中对话框有两种级别的模态,即应用程序级别的模态和窗口级别的模态,默认是应用程序级别的模态。Qt使用QDialog::exec()函数实现应用程序级别的模态对话框,使用QDialog::open()函数实现窗口级别的模态对话框。【例5.1】编写一个Qt应用程序,在其主窗口中添加一个文本编辑器,通过自定义的颜色对话框设置文本编辑器中的字体颜色。(1)复制教材源码中的examp4_6项目,并将项目文件名称修改为examp5_1.pro(2)在QtCreator中打开examp5_1项目,将其主框架标题修改为“例5.1”,并在“格式”主菜单下添加一个名为“颜色”的Action。(3)给项目添加一个基于QDialog类的界面类,类名为“ColorDialog”。这里使用QtCreator向导同时生成类文件及界面文件。如图5.3所示。(4)将新对话框的标题设置为“颜色对话框”,大小设置为200x100。(5)为第(2)步中的“颜色”Action添加信号与槽,并在槽函数中添加代码。如下所示。(6)构建并运行程序。选择程序的“格式”|“颜色”菜单命令,结果如图5.2所示。从程序运行结果可以看出,当自定义的“颜色设置”对话框被激活后,程序的主框架窗口随即变成灰色。此时,不能对主窗口中的任何元素进行操作。5.2.2非模态对话框Qt使用QDialog::show()函数来实现非模态对话框将例5.1中第(5)步中的语句2修改为下面的形式:dlg->show();即可实现“颜色设置”对话框的非模态显示。程序运行结果如图5.4所示。注意,QDialog::show()函数不会阻塞当前线程,当对话框显示出来后,show()函数会立即返回,继续执行该语句后面的代码。所以,要实现非模态对话框,对话框对象必须建立在堆上,也就是要用new方法来构建对话框对象,然后调用QDialog::show()函数将其显示。5.2.3数据交换在应用程序中使用对话框,往往都是想通过它来传递数据,也就是使用它与主窗口之间进行数据的交换。1、获取模态对话框数据在上面的例5.1应用程序中,只是实现了对话框的模态与非模态显示,并没有真正通过该对话框来设置主窗口中文本编辑器的字体颜色。下面是一个如何从模态对话框中获取数据的实例。【例5.2】继续实现例5.1应用程序功能,使用“颜色设置”对话框设置主窗口中文本编辑器字体颜色。(1)复制examp5_1项目,并将项目文件名称修改为examp5_2.pro。(2)在QtCreator中打开examp5_2项目,将其主框架标题修改为“例5.2”,并在“颜色设置”对话框框中添加3个QFrame对象和3个QRadioButton对象。(3)在ColorDialog中添加一个private访问权限的名称为color的QColor对象,用于存储用户选择的颜色;另外再添加一个public访问权限的名称为getColor()的成员函数,该函数返回一个QColor颜色对象。(4)在类ColorDialog构造方法中编写代码,对3个QFrame对象初始化,将它们填充为相应的色块。代码如下:(5)编写ColorDialog类的getColor()成员函数的实现代码。(6)为ColorDialog类的3个QRadioButton对象添加clicked信号和槽函数,并编写槽函数代码。(7)修改主窗口“格式”|“颜色”菜单命令槽函数代码,完成文本编辑器文字颜色的设置。(8)构建并运行程序。2、获取非模态对话框数据非模态对话框使用QDialog::show()函数来实现,与QDialog::exec()函数不同的是,show()函数没有返回值,它的作用仅仅是将对话框显示出来而已。因此,从非模态对话框中获取数据不能采用:dlg->show()==QDialog::Accepted这样例5.2中类似的代码。从非模态对话框中获取数据最好采用信号与槽的通信机制,通过信号函数与槽函数来进行数据的传递。例如,对于例5.2中的应用程序,建立“颜色设置”对话框和主窗口之间信号与槽通信机制,当对话框执行某个操作(如单击单选按钮)时,将对话框中需要传送的数据放到信号中发送出去,主窗口中的槽函数接收这一信号并作出相应的处理,从而实现数据从对话框向主窗口的传递。【例5.3】使用非模态对话框实现例5.2中应用程序功能。程序运行界面如下图所示。(1)复制examp5_2项目,并将项目文件名称修改为examp5_3.pro。(2)在QtCreator中打开examp5_3项目,将其主框架标题修改为“例5.3”。(3)在ColorDialog类的头文件colordialog.h中添加信号声明代码。如下所示signals:voidsendData(QColor);(4)打开ColorDialog类的实现文件colordialog.cpp,修改其中3个单选按钮的槽函数代码。(5)在MainWindow类的头文件mainwindow.h中添加槽函数声明代码。privateslots:voidreceiveData(QColor);(6)打开MainWindow类的实现文件mainwindow.cpp,添加槽函数的实现代码。voidMainWindow::receiveData(QColorc){ui->textEdit->setTextColor(c);}(7)修改mainwindow.cpp文件中槽函数on_action_color_triggered()代码。voidMainWindow::on_action_color_triggered(){ColorDialog*dlg=newColorDialog(this);connect(dlg,SIGNAL(sendData(QColor)),this,SLOT(receiveData(QColor)));dlg->show();}(8)构建并运行程序,测试结果如图5.6所示。5.3标准对话框Qt为应用程序设计提供了一些常用的标准对话框,如文件打开对话框、颜色选择对话框、字体选择对话框、数据输入对话框以及信息提示对话框等,来实现应用程序中的一些常用功能。Qt为每个标准对话框定义了相关的类,这些类全部继承自QDialog类下面介绍几个常用的标准对话框类:QColorDialog、QFileDialog、QFontDialog、QInputDialog

和QMessageBox5.3.1颜色对话框颜色对话框用于选取颜色值,由QColorDialog类实现。其界面效果如图5.7所示。【例5.4】使用Qt的颜色对话框实现例5.1中应用程序功能。(1)复制examp5_1项目,并将项目文件名称修改为examp5_4.pro。(2)在QtCreator中打开examp5_4项目,删除colordialog.ui界面文件,同时删除该界面文件对应的类文件colordialog.h和colordialog.cpp。(3)打开mainwindow.cpp文件,修改槽函数on_action_color_triggered()中的代码。(4)构建并运行程序。程序运行后,选择“格式”|“颜色”菜单命令,即可打开Qt的标准颜色对话框,如图5.7所示。5.3.2文件对话框文件对话框由QFileDialog类实现。其界面效果如图5.8所示。【例5.5】使用文件对话框实现例5.4中应用程序的“文件”|“打开”菜单的部分功能,要求将用户选择的文件名显示在主窗口的文本编辑器中。(1)复制examp5_4项目,并将项目文件名称修改为examp5_5.pro。(2)在QtCreator中打开examp5_5项目,为其“文件”|“打开”菜单命令添加槽函数,并编写代码。如下所示。(3)构建并运行程序。程序运行后,选择“文件”|“打开”菜单命令,弹出的文件对话框如图5.8所示。这里使用QFileDialog类的静态函数getOpenFileName()来打开文件对话框,该函数的原型如下:其中,参数parent为父窗口指针;caption为对话框标题;dir为默认的文件路径;filter为文件类型过滤器字符串;selectedFilter为文件类型过渡器指针;options为对话框设置。5.3.3字体对话框字体对话框由QFontDialog类实现。其界面效果如图5.9所示。【例5.6】使用字体对话框设置例5.5中应用程序文本编辑器的字体。(1)复制examp5_5项目,并将项目文件名称修改为examp5_6.pro。(2)在QtCreator中打开examp5_6项目,在项目主窗口中添加一个名为“字体”的Action,并将其放置在“格式”|“颜色”菜单命令的后面。为该Action添加槽函数,并编写代码。如下所示。(3)构建并运行程序。程序运行后,选择“文件”|“字体”菜单命令,弹出的字体对话框如图5.9所示。5.3.4输入对话框输入对话框由QInputDialog类实现。其界面效果如图5.10~5.14所示。【例5.7】为例5.6应用程序增加“数据添加”功能。程序运行结果如图5.15所示。(1)复制examp5_6项目,并将项目文件名称修改为examp5_7.pro。(2)在QtCreator中打开examp5_7项目,在主窗口中添加“数据”|“添加”菜单命令,并为“添加”菜单项添加槽函数,代码如下所示。(3)构建并运行程序。程序运行后,选择“文件”|“添加”菜单命令,就会依次弹出如图5.10~5.14所示的5种类型的输入对话框。5.3.5消息对话框消息对话框由QMessageBox类实现。其界面效果如图5.16~5.21所示。【例5.8】编写一个基于QWidget的应用程序,演示消息框的使用。(1)启动QtCreator,创建一个名为examp5_8的应用程序,应用程序主窗口基于QWidget类。(2)双击项目中的界面文件widget.ui,打开QtDesigner工具,设计应用程序主窗口界面。在主窗口中添加6个QPushButton按钮,并为它们设置clicked()信号的槽函数。(3)在按钮的槽函数中编写代码,生成不同类型的消息框。如下所示。(4)构建并运行程序。程序运行后,分别单击程序主窗口中的各个按钮,对各种消息框进行测试。5.4其他Qt窗体除了前面第3章介绍的QWidget窗体、第4章介绍的QMainWindow窗体以及本章介绍的QDialog窗体之外,在实际编程过程中还常常使用分割窗体、层叠窗体、闪屏窗体和MDI多窗体。5.4.1分隔窗体Qt的分割窗体一般用于分割窗口的布局,它所对应的C++类为QSplitter类。其继承关系如下图所示。【例5.9】一个简单的分割窗口实例。(1)启动QtCreator集成开发环境,创建一个名为examp5_9的应用程序,应用程序主窗口基于QMainWindow类。(2)双击界面文件mainwindow.ui,打开QtDesigner设计工具。删除主窗口中默认的菜单栏,并设置其他属性。(3)打开mainwindow.h文件,在MainWindow类中添加几个私有成员指针。如下所示。(4)打开mainwindow.cpp文件,在MainWindow类的构造函数中编写代码。如下所示。(5)构建并运行程序,结果如图5.25所示。程序运行后,移动分割窗口中的分割条,可以调整各个窗口的大小。5.4.2层叠窗体层叠窗体也称为堆栈窗体,它是一种容器组件,可以将多个窗体界面叠放在一起,当需要时再将其显示出来。层叠窗体一般与列表框QListWidget及下拉列表框QComboBox配合使用。层叠窗体所对应的C++类为QStackedWidget【例5.10】一个简单的层叠窗体应用实例。程序运行后,选择左侧列表框中不同的选项时,右侧显示所选项内容对应的不同窗体。(1)启动QtCreator,创建一个名为examp5_10的应用程序,应用程序主窗口基于QWidget类。(2)双击界面文件widget.ui,打开QtDesigner设计工具。在应用程序主窗口中添加一个名为listWidget的列表框,一个名为stackedWidget的层叠窗口。在层叠窗口中添加3个QWidget窗体,并在每个page窗体中添加一个测试用的标签部件。主窗口采用水平布局,层叠窗口的每个page窗体采用垂直布局。最终的界面布局、子部件名称和对应的类如图5.27所示。设置主窗口标题和大小、列表框初始数据项、标签控件文本等属性,如图5.28所示。(3)切换到“信号与槽”编辑状态,将列表框的currentRowChanged(int)信号关联到层叠窗口的setCurrentIndex(int)槽函数上。(4)构建并运行程序。程序运行后,当选择主窗口左侧列表框中的选项时,显示层叠窗口中的相应page窗体,如图5.26所示。5.4.3闪屏窗体闪屏(Splash)窗口一般作为大型应用程序的启动画面,用于展示软件功能或版权等信息,当然也可以用于登录验证。闪屏窗口显示时,应用程序会在后台做一些比较耗时的启动准备工作,例如连接数据库、连接网络等,闪屏窗口显示一段时间后自动关闭,然后软件的主窗口显示出来。在Qt中,有两种方法可以创建闪屏窗口。一种是先创建一个QWidget或QDialog窗体,然后将其窗口类型设置为Qt::SplashScreen类型;另一种方法是直接使用QSplashScreen类。QSplashScreen类是QWidget的直接子类,它提供了载入图片、自动设置窗体无边框效果等功能。【例5.11】一个简单的Splash窗体应用实例。程序运行后,首先显示欢迎界面,几秒钟后显示程序主窗口。(1)启动QtCreator,创建一个名为examp5_11的应用程序,应用程序主窗口基于QWidget类。(2)为项目增加一个资源文件res.qrc,并在该文件中添加一个图像文件,作为程序的splash窗体画面。(3)打开项目的main.cpp主函数文件,并编写代码。如下所示。(4)构造并运行程序。5.4.4MDI窗体使用Qt不仅能够开发单文档(SDI,Single-documentInterface)和基于窗体(QWidget或QDialog)的应用程序,还可以开发多

温馨提示

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

评论

0/150

提交评论