Qt5开发及实例(第2版)-第5章Qt课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Qt5开发及实例(第2版)-第5章Qt课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt5 开发 实例 Qt 课件
- 资源描述:
-
1、第5章 Qt 5主窗体Qt 5主窗体主窗体构成构成5.15.25.35.45.5Qt 5文件操作功能文件操作功能Qt 5图像坐标变换图像坐标变换Qt 5文本编辑功能文本编辑功能Qt 5排版功能排版功能5.1 Qt 5主窗体构成主窗体构成5.1.1 基本元素基本元素QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器、图片编辑器等。本章将对此进行详细介绍。其界面布局如图
2、5.1所示。5.1.1 基本元素基本元素1菜单栏菜单栏菜单是一系列命令的列表。为了实现菜单、工具栏按钮、键盘快捷方式等命令的一致性,Qt使用动作(Action)来表示这些命令。Qt的菜单就是由一系列的QAction动作对象构成的列表,而菜单栏则是包容菜单的面板,它位于主窗口顶部、主窗口标题栏的下面。一个主窗口最多只有一个菜单栏。2状态栏状态栏状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的最底部。用户可以在状态栏上添加、使用Qt窗口部件。一个主窗口最多只有一个状态栏。5.1.1 基本元素基本元素3工具栏工具栏工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令
3、(动作)组成。工具栏位于菜单栏的下面、状态栏的上面,可以停靠在主窗口的上、下、左、右四个方向上。一个主窗口可以包含多个工具栏。4锚接部件锚接部件锚接部件作为一个容器使用,以包容其他窗口部件来实现某些功能。例如,Qt设计器的属性编辑器、对象监视器等都是由锚接部件包容其他的Qt窗口部件来实现的。它位于工具栏区的内部,可以作为一个窗口自由地浮动在主窗口上面,也可以像工具栏一样停靠在主窗口的上、下、左、右四个方向上,一个主窗口可以包含多个锚接部件。5中心部件中心部件中心部件处在锚接部件区的内部、主窗口的中心,一个主窗口只有一个中心部件。5.1.2【综合实例】:文本编辑器【综合实例】:文本编辑器(1)新
4、建Qt Widgets Application(详见1.3.1节),项目名称为“ImageProcessor”,基类选择“QMainWindow”,类名命名为“ImgProcessor”,取消“创建界面”复选框的选中状态。单击“下一步”按钮,最后单击“完成”按钮,完成该项目工程的建立。(2)添加该工程的提供主要显示文本编辑框函数所在的文件,在“ImageProcessor”项目名上单击鼠标右键,在弹出的快捷菜单中选择“添加新文件.”菜单项,在弹出的对话框中选择“C+Class”选项,单击“Choose.”按钮,弹出对话框,在“Base class”后面的下拉列表框中选择基类名“QWidget”
5、,在“Class name”后面的文本框中输入类的名称“ShowWidget”。(3)单击“下一步”按钮,单击“完成”按钮,添加“showwidget.h”头文件和“showwidget.cpp”源文件。5.1.2【综合实例】:文本编辑器【综合实例】:文本编辑器(4)打开“showwidget.h”头文件,具体代码如下:#include#include#include#include class ShowWidget:public QWidget Q_OBJECTpublic:explicit ShowWidget(QWidget*parent=0);QImage img;QLabel*ima
6、geLabel;QTextEdit*text;signals:public slots:;5.1.2【综合实例】:文本编辑器【综合实例】:文本编辑器(5)打开“showwidget.cpp”文件,添加如下代码:#include showwidget.h#include ShowWidget:ShowWidget(QWidget*parent):QWidget(parent)imageLabel=new QLabel;imageLabel-setScaledContents(true);text=new QTextEdit;QHBoxLayout*mainLayout=new QHBoxLayo
7、ut(this);mainLayout-addWidget(imageLabel);mainLayout-addWidget(text);5.1.2【综合实例】:文本编辑器【综合实例】:文本编辑器(6)主函数ImgProcessor类声明中createActions()函数用于创建所有的动作、createMenus()函数用于创建菜单、createToolBars()函数用于创建工具栏;接着声明实现主窗口所需的各个元素,包括菜单、工具栏及各个动作等;最后声明用到的槽函数,打开“imgprocessor.h”文件,添加代码。5.1.2【综合实例】:文本编辑器【综合实例】:文本编辑器(7)下面是主
8、窗口构造函数部分的内容,构造函数主要实现窗体的初始化,打开“imgprocessor.cpp”文件,添加如下代码:ImgProcessor:ImgProcessor(QWidget*parent):QMainWindow(parent)setWindowTitle(tr(Easy Word);/设置窗体标题 showWidget=new ShowWidget(this);/(a)setCentralWidget(showWidget);/*创建动作、菜单、工具栏的函数*/createActions();createMenus();createToolBars();if(img.load(ima
9、ge.png)/在imageLabel对象中放置图像 showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);5.1.3 菜单与工具栏的实现菜单与工具栏的实现1动作(动作(Action)的实现)的实现以下是实现基本文件操作的动作(Action)的代码。以下是实现打印文本和图像、图像缩放、旋转和镜像的动作(Action)的代码。2菜单(菜单(Menus)的实现)的实现在实现了各个动作之后,需要将它们通过菜单、工具栏或快捷键的方式体现出来,以下是菜单的实现函数createMenus()代码。3工具栏(工具栏(ToolBars)的实现)的实现接下
10、来实现相对应的工具栏createToolBars(),主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的方式,也可根据需要进行工具条的划分。工具条是一个可移动的窗口,它可停靠的区域由QToolBar的allowAreas决定,包括Qt:LeftToolBarArea、Qt:RightToolBarArea、Qt:TopToolBarArea、Qt:BottomToolBarArea和Qt:AllToolBarAreas。默认为Qt:AllToolBarAreas,启动后默认出现于主窗口的顶部。可通过调用setAllowAreas()函数来指定工具条可停靠的区域,例如:fileT
11、ool-setAllowedAreas(Qt:TopToolBarArea|Qt:LeftToolBarArea);此函数限定文件工具条只可出现在主窗口的顶部或左侧。工具条也可通过调用setMovable()函数设定可移动性,例如:fileTool-setMovable(false);指定文件工具条不可移动,只出现于主窗口的顶部。5.1.3 菜单与工具栏的实现菜单与工具栏的实现5.1.3 菜单与工具栏的实现菜单与工具栏的实现将程序中用到的图片保存到该工程下的debug文件夹中,运行程序,结果如图5.3所示。5.2 Qt 5文件操作功能文件操作功能5.2.1 新建文件新建文件下面将介绍如何实现新
12、建一个空白文件的功能。(1)打开“imgprocessor.h”头文件,添加“protected slots:”变量:protected slots:void ShowNewFile();(2)在createActions()函数的“新建动作”最后添加事件关联:connect(NewFileAction,SIGNAL(triggered(),this,SLOT(ShowNewFile();(3)实现新建文件功能的函数ShowNewFile()如下:void ImgProcessor:ShowNewFile()ImgProcessor*newImgProcessor=new ImgProcess
13、or;newImgProcessor-show();5.2.1 新建文件(4)运行程序,单击“文件”“新建”命令或单击工具栏上的 按钮,弹出新的文件编辑窗口,如图5.4所示。5.2.2 打开文件(1)在“imgprocessor.h”头文件中添加“protected slots:”变量:void ShowOpenFile();(2)在createActions()函数的“打开动作”最后添加事件关联:connect(openFileAction,SIGNAL(triggered(),this,SLOT(ShowOpenFile();(3)实现打开文件功能的函数ShowOpenFile()如下:v
14、oid ImgProcessor:ShowOpenFile()fileName=QFileDialog:getOpenFileName(this);if(!fileName.isEmpty()if(showWidget-text-document()-isEmpty()loadFile(fileName);else ImgProcessor*newImgProcessor=new ImgProcessor;newImgProcessor-show();newImgProcessor-loadFile(fileName);5.2.2 打开文件其中,loadFile()函数的实现如下,该函数利用Q
15、File和QTextStream完成具体读取文件内容的工作:void ImgProcessor:loadFile(QString filename)printf(file name:%sn,filename.data();QFile file(filename);if(file.open(QIODevice:ReadOnly|QIODevice:Text)QTextStream textStream(&file);while(!textStream.atEnd()showWidget-text-append(textStream.readLine();printf(read linen);pr
16、intf(endn);5.2.2 打开文件在此仅详细说明标准文件对话框QFileDialog的getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。QString QFileDialog:getOpenFileName(QWidget*parent=0,/定义标准文件对话框的父窗口const QString&caption=QString(),/定义标准文件对话框的标题名const QString&dir=QString(),/(a)const QString&filter=QString(),/(b)QString*selectedF
17、ilter=0,/用户选择的过滤器通过此参数返回Options options=0);5.2.2 打开文件(4)在该源文件的开始部分添加如下头文件:#include#include#include(5)运行程序,单击“文件”“打开”命令或单击工具栏上的 按钮,弹出“打开”对话框,如图5.5(a)所示。选择某个文件,单击“打开”按钮,文本编辑框中将显示出该文件的内容,如图5.5(b)所示。5.2.3 打印文件打印文件1文本打印文本打印打印文本在文本编辑工作中经常使用,下面将介绍如何实现文本打印功能。实现后的效果如图5.6所示。5.2.3 打印文件打印文件具体实现步骤如下。(1)在头文件中添加“p
18、rotected slots:”变量:void ShowPrintText();(2)在createActions()函数的“打印文本动作”最后添加事件关联:connect(PrintTextAction,SIGNAL(triggered(),this,SLOT(ShowPrintText();(3)实现打印文本功能的函数ShowPrintText()如下:void ImgProcessor:ShowPrintText()QPrinter printer;/新建一个QPrinter对象 QPrintDialog printDialog(&printer,this);/(a)if(printDi
19、alog.exec()/(b)/获得QTextEdit对象的文档 QTextDocument*doc=showWidget-text-document();doc-print(&printer);/打印 5.2.3 打印文件打印文件(4)在该源文件的开始部分添加如下头文件:#include#include(5)运行程序,单击“文件”“打印文本”命令或工具栏上的 按钮,弹出标准打印对话框,如图5.6所示。5.2.3 打印文件打印文件2图像打印图像打印(1)在头文件中添加“protected slots:”变量:void ShowPrintImage();(2)在createActions()函数
20、的最后添加事件关联:connect(PrintImageAction,SIGNAL(triggered(),this,SLOT(ShowPrintImage();5.2.3 打印文件打印文件(3)实现打印图像功能的函数ShowPrintImage()如下:void ImgProcessor:ShowPrintImage()QPrinter printer;/新建一个QPrinter对象 QPrintDialog printDialog(&printer,this);/(a)if(printDialog.exec()/(b)QPainter painter(&printer);/(c)QRect
21、 rect=painter.viewport();/获得QPainter对象的视图矩形区域 QSize size=img.size();/获得图像的大小 /*按照图形的比例大小重新设置视图矩形区域*/size.scale(rect.size(),Qt:KeepAspectRatio);painter.setViewport(rect.x(),rect.y(),size.width(),size.height();painter.setWindow(img.rect();/设置QPainter窗口大小为图像的大小 painter.drawImage(0,0,img);/打印图像 5.2.3 打印
22、文件打印文件(4)在该源文件的开始部分添加如下头文件:#include(5)运行程序,单击“文件”“打印图像”命令或单击工具栏上的 按钮,弹出标准打印对话框,显示效果如图5.6所示。5.3 Qt 5图像坐标变换图像坐标变换5.3.1 缩放功能缩放功能下面将介绍如何实现缩放功能,具体步骤如下。(1)在头文件中添加“protected slots:”变量:void ShowZoomIn();(2)在createActions()函数的最后添加事件关联:connect(zoomInAction,SIGNAL(triggered(),this,SLOT(ShowZoomIn();(3)实现图形放大功能
23、的函数ShowZoomIn()如下:void ImgProcessor:ShowZoomIn()if(img.isNull()/有效性判断 return;QMatrix martix;/声明一个QMatrix类的实例 martix.scale(2,2);/(a)img=img.transformed(martix);/重新设置显示图形 showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);5.3.1 缩放功能缩放功能(4)在头文件中添加“protected slots:”变量:void ShowZoomOut();(5)在createAc
24、tions()函数的最后添加事件关联:connect(zoomOutAction,SIGNAL(triggered(),this,SLOT(ShowZoomOut();(6)实现图形缩小功能的函数ShowZoomOut()如下:void ImgProcessor:ShowZoomOut()if(img.isNull()return;QMatrix matrix;matrix.scale(0.5,0.5);/(a)img=img.transformed(matrix);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);5.3.1 缩放功
25、能缩放功能(7)运行程序,单击“编辑”“放大”命令或单击工具栏上的 按钮,界面效果如图5.7所示。5.3.2 旋转功能旋转功能(1)在头文件中添加“protected slots:”变量:void ShowRotate90();(2)在createActions()函数的最后添加事件关联:connect(rotate90Action,SIGNAL(triggered(),this,SLOT(ShowRotate90();(3)ShowRotate90()函数的具体实现代码如下:void ImgProcessor:ShowRotate90()if(img.isNull()return;QMatr
展开阅读全文