Qt-5开发及实例-第5章--Qt-5主窗口课件_第1页
Qt-5开发及实例-第5章--Qt-5主窗口课件_第2页
Qt-5开发及实例-第5章--Qt-5主窗口课件_第3页
Qt-5开发及实例-第5章--Qt-5主窗口课件_第4页
Qt-5开发及实例-第5章--Qt-5主窗口课件_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 Qt 5主窗口Qt 5主窗口构成1菜单栏2状态栏3工具栏4锚接部件5中心部件01基 本 元 素基 本 元 素QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序(如文本编辑器、图片编辑器等)的基础。本章将对此进行详细介绍。Qt主窗口界面布局如图5.1所示。基 本 元 素1菜单栏菜单是一系列命令的列表。为了实现菜单、工具栏按钮、键盘快捷方式等命令的一致性,Qt使用动作(Action

2、)来表示这些命令。Qt的菜单就是由一系列的QAction动作对象构成的列表,而菜单栏则是包容菜单的面板,它位于主窗口标题栏的下面。一个主窗口只能有一个菜单栏。2状态栏状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的底部。用户可以在状态栏上添加、使用Qt窗口部件。一个主窗口只能有一个状态栏。3工具栏工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成。工具栏位于菜单栏的下面、状态栏的上面,可以停靠在主窗口的上、下、左、右四个方向上。一个主窗口可以包含多个工具栏。基 本 元 素4锚接部件锚接部件作为一个容器使用,以包容其他窗口部件来实现某些功能。例如,

3、Qt设计器的属性编辑器、对象监视器等都是由锚接部件包容其他的Qt窗口部件来实现的。它位于工具栏区的内部,可以作为一个窗口自由地浮动在主窗口上面,也可以像工具栏一样停靠在主窗口的上、下、左、右四个方向上。一个主窗口可以包含多个锚接部件。5中心部件中心部件处在锚接部件区的内部、主窗口的中心。一个主窗口只能有一个中心部件。02【综合实例】文本编辑器【综合实例】文本编辑器(1)文件操作功能:包括新建一个文件,利用标准文件对话框QFileDialog类打开一个已存在的文件,利用QFile和QTextStream读取文件内容,打印文件(分文本打印和图像打印)。通过实例介绍标准打印对话框QPrintDial

4、og类的使用方法,以QPrinter作为QPaintDevice画图工具实现图像打印。(2)图像处理软件中的常用功能:包括图片的缩放、旋转、镜像等坐标变换,使用QMatrix实现图像的各种坐标变换。(3)开发文本编辑功能:通过在工具栏上设置文字字体、字号大小、加粗、斜体、下画线及字体颜色等快捷按钮的实现,介绍在工具栏中嵌入控件的方法。其中,通过设置字体颜色功能,介绍标准颜色对话框QColorDialog类的使用方法。(4)排版功能:通过选择某种排序方式实现对文本排序,以及实现文本对齐(包括左对齐、右对齐、居中对齐和两端对齐)和撤销、重做的方法。【综合实例】文本编辑器【例】(难度一般)(CH50

5、1)设计界面,效果如图5.2所示。【综合实例】文本编辑器首先建立项目的框架代码,具体步骤如下。(1)新建Qt Widgets Application(详见1.3.1节),项目名称为“ImageProcessor”,基类选择“QMainWindow”,类名命名为“ImgProcessor”,取消“创建界面”复选框的选中状态。单击“下一步”按钮,最后单击“完成”按钮,完成该项目工程的建立。(2)添加该工程的提供主要显示文本编辑框函数所在的文件,在“ImageProcessor”项目名上单击鼠标右键,在弹出的快捷菜单中选择“添加新文件.”选项,在弹出的对话框中选择“C+ Class”选项,单击“Ch

6、oose.”按钮,在弹出的对话框的“Base class”下拉列表框中选择基类名“QWidget”,在“Class name”文本框中输入类的名称“ShowWidget”。(3)单击“下一步”按钮,单击“完成”按钮,添加“showwidget.h”头文件和“showwidget.cpp”源文件。【综合实例】文本编辑器(4)打开“showwidget.h”头文件,具体代码如下:#include #include #include #include class ShowWidget : public QWidget Q_OBJECTpublic: explicit ShowWidget(QWidg

7、et *parent = 0); QImage img; QLabel *imageLabel; QTextEdit *text;signals:public slots:;【综合实例】文本编辑器(5)打开“showwidget.cpp”文件,添加如下代码:#include showwidget.h#include ShowWidget:ShowWidget(QWidget *parent):QWidget(parent) imageLabel =new QLabel; imageLabel-setScaledContents(true); text =new QTextEdit; QHBox

8、Layout *mainLayout =new QHBoxLayout(this); mainLayout-addWidget(imageLabel); mainLayout-addWidget(text);(6)主函数ImgProcessor类声明中的createActions()函数用于创建所有的动作、createMenus()函数用于创建菜单、createToolBars()函数用于创建工具栏;接着声明实现主窗口所需的各个元素,包括菜单、工具栏及各个动作等;最后声明用到的槽函数,打开“imgprocessor.h”文件,添加如下代码。【综合实例】文本编辑器(7)下面是主窗口构造函数部分的

9、内容,构造函数主要实现窗体的初始化,打开“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

10、(image.png) /在imageLabel对象中放置图像 showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); 其中,(a) showWidget =new ShowWidget(this)、setCentralWidget(showWidget):创建放置图像QLabel和文本编辑框QTextEdit的QWidget对象showWidget,并将该QWidget对象设置为中心部件。1动作(Action)的实现2菜单(Menus)的实现3工具栏(ToolBars)的实现03菜单与工具栏的实现1动作(Action)的实现以下是实现基

11、本文件操作的动作(Action)的代码。其中,(a) openFileAction =new QAction(QIcon(open.png),tr(打开),this):在创建“打开文件”动作的同时,指定了此动作使用的图标、名称及父窗口。(b) openFileAction-setShortcut(tr(Ctrl+O):设置此动作的组合键为Ctrl+O。(c) openFileAction-setStatusTip(tr(打开一个文件):设定了状态栏显示,当鼠标光标移至此动作对应的菜单条目或工具栏按钮上时,在状态栏上显示“打开一个文件”的提示。在创建动作时,也可不指定图标。这类动作通常只在菜单中

12、出现,而不在工具栏上使用。以下是实现打印文本和图像、图像缩放、旋转和镜像的动作(Action)的代码(位于ImgProcessor:createActions()方法中)。2菜单(Menus)的实现在实现了各个动作之后,需要将它们通过菜单、工具栏或快捷键的方式体现出来,以下是菜单的实现函数createMenus()代码。其中,在实现文件菜单中,(a) fileMenu =menuBar()-addMenu(tr(文件):直接调用QMainWindow的menuBar()函数即可得到主窗口的菜单栏指针,再调用菜单栏QMenuBar的addMenu()函数,即可完成在菜单栏中插入一个新菜单file

13、Menu,fileMenu为一个QMenu类对象。(b) fileMenu-addAction():调用QMenu的addAction()函数在菜单中加入菜单条目“打开”“新建”“打印文本”“打印图像”。类似地,实现缩放菜单、旋转菜单和镜像菜单。3工具栏(ToolBars)的实现接下来实现相对应的工具栏createToolBars(),主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的方式,也可根据需要进行工具条的划分。其中,在文件工具条中,(a) fileTool =addToolBar(File):直接调用QMainWindow的addToolBar()函数即可获得主窗口的

14、工具条对象,每新增一个工具条调用一次addToolBar()函数,赋予不同的名称,即可在主窗口中新增一个工具条。(b) fileTool-addAction():调用QToolBar的addAction()函数在工具条中插入属于本工具条的动作。类似地,实现“编辑工具条”“旋转工具条”“撤销和重做工具条”。工具条的显示可以由用户进行选择,在工具栏上单击鼠标右键将弹出工具条显示的选择菜单,用户对需要显示的工具条进行选择即可。工具条是一个可移动的窗口,它可停靠的区域由QToolBar的allowAreas决定,包括Qt:LeftToolBarArea、Qt:RightToolBarArea、Qt:T

15、opToolBarArea、Qt:BottomToolBarArea和Qt:AllToolBarAreas。默认为Qt:AllToolBarAreas,启动后默认出现于主窗口的顶部。可通过调用setAllowAreas()函数来指定工具条可停靠的区域,例如: fileTool-setAllowedAreas(Qt:TopToolBarArea|Qt:LeftToolBarArea);此函数限定文件工具条只可出现在主窗口的顶部或左侧。工具条也可通过调用setMovable()函数设定可移动性,例如: fileTool-setMovable(false);指定文件工具条不可移动,只出现于主窗口的顶

16、部。3工具栏(ToolBars)的实现选择“构建”“构建项目 ImageProcessor”菜单项,将程序中用到的图片保存到项目D:QtCH5CH501build-ImageProcessor-Desktop_Qt_5_11_1_MinGW_32bit-Debug目录下,运行程序,效果如图5.3所示。第5章 Qt 5主窗口Qt 5文件操作功能01新 建 文 件新 建 文 件在图5.3中,当单击“文件”“新建”命令时,没有任何反应。下面将介绍如何实现新建一个空白文件的功能。(1)打开“imgprocessor.h”头文件,添加“protected slots:”变量:protected slot

17、s: void ShowNewFile();(2)在createActions()函数的“新建动作”最后添加事件关联:connect(NewFileAction,SIGNAL(triggered(),this,SLOT(ShowNewFile();(3)实现新建文件功能的函数ShowNewFile()如下:void ImgProcessor:ShowNewFile() ImgProcessor *newImgProcessor =new ImgProcessor; newImgProcessor-show();新 建 文 件(4)运行程序,单击“文件”“新建”命令或单击工具栏上的 按钮,弹出新

18、的文件编辑窗口,如图5.4所示。02打 开 文 件打 开 文 件利用标准文件对话框QFileDialog打开一个已经存在的文件。若当前中央窗体中已有打开的文件,则在一个新的窗口中打开选定的文件;若当前中央窗体是空白的,则在当前中央窗体中打开。(1)在“imgprocessor.h”头文件中添加“protected slots:”变量: void ShowOpenFile();(2)在createActions()函数的“打开动作”最后添加事件关联: connect(openFileAction,SIGNAL(triggered(),this,SLOT(ShowOpenFile();打 开 文

19、件(3)实现打开文件功能的函数ShowOpenFile()如下:void 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(file

20、Name); 打 开 文 件其中,loadFile()函数的实现如下,该函数利用QFile和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-app

21、end(textStream.readLine(); printf(read linen); printf(endn); 打 开 文 件在此仅详细说明标准文件对话框QFileDialog的getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。QString QFileDialog:getOpenFileName(QWidget* parent=0,/定义标准文件对话框的父窗口const QString & caption=QString(),/定义标准文件对话框的标题名const QString & dir=QString(),/(a)

22、 const QString & filter=QString(),/(b)QString * selectedFilter=0,/用户选择过滤器通过此参数返回Options options=0);其中,(a) const QString & dir=QString():指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件。(b) const QString & filter=QString():此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间用“;”隔开。打 开 文 件(4)在该源文件的开始部分添加如下头文件:#incl

23、ude #include #include (5)运行程序,单击“文件”“打开”命令或单击工具栏上的 按钮,弹出“打开”对话框,如图5.5(a)所示。选择某个文件,单击“打开”按钮,文本编辑框中将显示出该文件的内容,如图5.5(b)所示。1文本打印2图像打印03打 印 文 件1文本打印打印文本在文本编辑工作中经常使用,下面将介绍如何实现文本打印功能。标准打印对话框效果如图5.6所示。1文本打印如图5.6所示,QPrintDialog标准打印对话框提供了打印机的选择、配置功能,并允许用户改变文档有关的设置,如页面范围、打印份数等。具体实现步骤如下。(1)在“imgprocessor.h”头文件中

24、添加“protected slots:”变量: void ShowPrintText();(2)在createActions()函数的“打印文本动作”最后添加事件关联: connect(PrintTextAction,SIGNAL(triggered(),this,SLOT(ShowPrintText();1文本打印(3)实现打印文本功能的函数ShowPrintText ()如下:void ImgProcessor:ShowPrintText() QPrinter printer;/新建一个QPrinter对象 QPrintDialog printDialog(&printer,this);/

25、(a) if(printDialog.exec()/(b) /获得QTextEdit对象的文档 QTextDocument *doc =showWidget-text-document(); doc-print(&printer);/打印 其中,(a) QPrintDialog printDialog(&printer,this):创建一个QPrintDialog对象,参数为QPrinter对象。(b) if(printDialog.exec():判断标准打印对话框显示后用户是否单击“打印”按钮。若单击“打印”按钮,则相关打印属性将可以通过创建QPrintDialog对象时使用的QPrinte

26、r对象获得;若用户单击“取消”按钮,则不执行后续的打印操作。1文本打印(4)在该源文件的开始部分添加如下头文件:#include #include (5)运行程序,单击“文件”“打印文本”命令或工具栏上的 按钮,弹出标准打印对话框,如图5.6所示。2图像打印打印图像实际上是在一个QPaintDevice中画图,与平常在QWidget、QPixmap和QImage中画图相同,都是创建一个QPainter对象进行画图,只是打印使用的是QPrinter,QPrinter本质上也是一个绘图设备QPaintDevice。下面将介绍如何实现图像打印功能。(1)在“imgprocessor.h”头文件中添加

27、“protected slots:”变量: void ShowPrintImage();(2)在createActions()函数的“打印图像动作”最后添加事件关联: connect(PrintImageAction,SIGNAL(triggered(),this,SLOT(ShowPrintImage();2图像打印(3)实现打印图像功能的函数ShowPrintImage ()如下:void ImgProcessor:ShowPrintImage() QPrinter printer;/新建一个QPrinter对象 QPrintDialog printDialog(&printer,this

28、);/(a) if(printDialog.exec()/(b) QPainter painter(&printer);/(c) QRect 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.setWin

29、dow(img.rect();/设置QPainter窗口大小为图像的大小 painter.drawImage(0,0,img);/打印图像 2图像打印其中,(a) QPrintDialog printDialog(&printer,this):创建一个QPrintDialog对象,参数为QPrinter对象。(b) if(printDialog.exec():判断打印对话框显示后用户是否单击“打印”按钮。若单击“打印”按钮,则相关打印属性将可以通过创建QPrintDialog对象时使用的QPrinter对象获得;若用户单击“取消”按钮,则不执行后续的打印操作。(c) QPainter pain

30、ter(&printer):创建一个QPainter对象,并指定绘图设备为一个QPrinter对象。(4)在该源文件的开始部分添加如下头文件: #include (5)运行程序,单击“文件”“打印图像”命令或单击工具栏上的 按钮,弹出标准打印对话框,显示效果如图5.6所示。第5章 Qt 5主窗口Qt 5图像坐标变换01缩 放 功 能缩 放 功 能(1)在“imgprocessor.h”头文件中添加“protected slots:”变量: void ShowZoomIn();(2)在createActions()函数的“放大动作”最后添加事件关联: connect(zoomInAction,S

31、IGNAL(triggered(),this,SLOT(ShowZoomIn();(3)实现图形放大功能的函数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);其中,(a) martix.scal

32、e(2,2)、img = img.transformed(martix):按照2倍比例对水平和垂直方向进行放大,并将当前显示的图形按照该坐标矩阵进行转换。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);缩 放 功 能(4)在“imgprocessor.h”头文件中添加“prot

33、ected slots:”变量: void ShowZoomOut();(5)在createActions()函数的“缩小动作”最后添加事件关联: connect(zoomOutAction,SIGNAL(triggered(),this,SLOT(ShowZoomOut();(6)实现图形缩小功能的函数ShowZoomOut()如下:缩 放 功 能(7)运行程序,单击“编辑”“放大”命令或单击工具栏上的 按钮,图像放大效果如图5.7所示。02旋 转 功 能旋 转 功 能ShowRotate90()函数实现的是图形的旋转,此函数实现坐标的逆时针旋转90。具体实现步骤如下。(1)在“imgpro

34、cessor.h”头文件中添加“protected slots:”变量: void ShowRotate90();(2)在createActions()函数的“旋转90”最后添加事件关联: connect(rotate90Action,SIGNAL(triggered(),this,SLOT(ShowRotate90();(3)ShowRotate90()函数的具体实现代码如下:void ImgProcessor:ShowRotate90() if(img.isNull() return; QMatrix matrix; matrix.rotate(90); img = img.transfo

35、rmed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);旋 转 功 能(4)在“imgprocessor.h”头文件中添加“protected slots:”变量:void ShowRotate180();void ShowRotate270();(5)在createActions()函数的“旋转180”“旋转270”最后分别添加事件关联:connect(rotate180Action,SIGNAL(triggered(),this,SLOT(ShowRotate180();connect(rotate270Ac

36、tion,SIGNAL(triggered(),this,SLOT(ShowRotate270();旋 转 功 能(6)ShowRotate180()、ShowRotate270()函数的具体实现代码如下:void ImgProcessor:ShowRotate180() if(img.isNull() return; QMatrix matrix; matrix.rotate(180); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);void ImgProcessor

37、:ShowRotate270() if(img.isNull() return; QMatrix matrix; matrix.rotate(270); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);旋 转 功 能(7)运行程序,单击“旋转”“旋转90”命令或单击工具栏上的 按钮,图像旋转90的效果如图5.8所示。03镜 像 功 能镜 像 功 能通过QImage:mirrored(bool horizontal,bool vertical)实现图形的镜像功能,参数hor

38、izontal和vertical分别指定了镜像的方向。具体实现步骤如下。(1)在“imgprocessor.h”头文件中添加“protected slots:”变量:void ShowMirrorVertical();void ShowMirrorHorizontal();(2)在createActions()函数的“纵向镜像”“横向镜像”最后分别添加事件关联:connect(mirrorVerticalAction,SIGNAL(triggered(),this,SLOT(ShowMirrorVertical();connect(mirrorHorizontalAction,SIGNAL(t

39、riggered(),this,SLOT(ShowMirrorHorizontal();镜 像 功 能(3)ShowMirrorVertical ()、ShowMirrorHorizontal ()函数的具体实现代码如下:void ImgProcessor:ShowMirrorVertical() if(img.isNull() return; img=img.mirrored(false,true); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);void ImgProcessor:ShowMirrorHorizontal()

40、if(img.isNull() return; img=img.mirrored(true,false); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);镜 像 功 能(4)此时运行程序,单击“镜像”“横向镜像”命令,蝴蝶翅膀底部的阴影从右边移到左边,横向镜像效果如图5.9所示。第5章 Qt 5主窗口Qt 5文本编辑功能Qt 5文本编辑功能文本编辑各类之间的划分与关系如图5.10所示。任何一个文本编辑的程序都要用QTextEdit作为输入文本的容器,在它里面输入可编辑文本由QTextDocument作为载体,而用来表示QTextD

41、ocument的元素的QTextBlock、QTextList、QTextFrame等是QTextDocument的不同表现形式,可以表示为字符串、段落、列表、表格或图片等。Qt 5文本编辑功能实现文本编辑的具体操作步骤如下。(1)在“imgprocessor.h”头文件中添加“private:”变量:QLabel *fontLabel1; /字体设置项QFontComboBox *fontComboBox;QLabel *fontLabel2;QComboBox *sizeComboBox;QToolButton *boldBtn;QToolButton *italicBtn;QToolBu

42、tton *underlineBtn;QToolButton *colorBtn;QToolBar *fontToolBar; /字体工具栏(2)在“imgprocessor.h”头文件中添加“protected slots:”变量:void ShowFontComboBox(QString comboStr);void ShowSizeSpinBox(QString spinValue);void ShowBoldBtn();void ShowItalicBtn();void ShowUnderlineBtn();void ShowColorBtn();void ShowCurrentFor

43、matChanged(const QTextCharFormat &fmt);Qt 5文本编辑功能(3)在相对应的构造函数中,在语句“setCentralWidget(showWidget);”与语句“createActions();”之间添加如下代码。(4)在该构造函数的最后部分添加相关的事件关联:connect(fontComboBox,SIGNAL(activated(QString), this,SLOT(ShowFontComboBox(QString);connect(sizeComboBox,SIGNAL(activated(QString), this,SLOT(ShowSiz

44、eSpinBox(QString);connect(boldBtn,SIGNAL(clicked(),this,SLOT(ShowBoldBtn();connect(italicBtn,SIGNAL(clicked(),this,SLOT(ShowItalicBtn();connect(underlineBtn,SIGNAL(clicked(),this,SLOT(ShowUnderlineBtn();connect(colorBtn,SIGNAL(clicked(),this,SLOT(ShowColorBtn();connect(showWidget-text,SIGNAL(current

45、CharFormatChanged(QTextCharFormat&),this,SLOT(ShowCurrentFormatChanged(QTextCharFormat&);Qt 5文本编辑功能(5)在相对应的工具栏createToolBars()函数中添加如下代码:/字体工具条fontToolBar =addToolBar(Font);fontToolBar-addWidget(fontLabel1);fontToolBar-addWidget(fontComboBox);fontToolBar-addWidget(fontLabel2);fontToolBar-addWidget(si

46、zeComboBox);fontToolBar-addSeparator();fontToolBar-addWidget(boldBtn);fontToolBar-addWidget(italicBtn);fontToolBar-addWidget(underlineBtn);fontToolBar-addSeparator();fontToolBar-addWidget(colorBtn);调用QFontComboBox的setFontFilters接口可过滤只在下拉列表框中显示某一类字体,默认情况下为QFontComboBox:AllFonts列出所有字体。01设 置 字 体设 置 字 体

47、完成设置选定文字字体的函数ShowFontComboBox()代码如下:void ImgProcessor:ShowFontComboBox(QString comboStr)/设置字体 QTextCharFormat fmt;/创建一个QTextCharFormat对象 fmt.setFontFamily(comboStr);/选择的字体名称设置给QTextCharFormat对象 mergeFormat(fmt); /将新的格式应用到光标选区内的字符前面介绍过,所有对于QTextDocument进行的修改都通过QTextCursor类来完成,具体代码如下:void ImgProcessor

48、:mergeFormat(QTextCharFormat format) QTextCursor cursor =showWidget-text-textCursor();/获得编辑框中的光标 if(!cursor.hasSelection()/(a) cursor.select(QTextCursor:WordUnderCursor); cursor.mergeCharFormat(format);/(b) showWidget-text-mergeCurrentCharFormat(format);/(c)设 置 字 体其中,(a) if(!cursor.hasSelection()、cu

49、rsor.select(QTextCursor:WordUnderCursor):若光标没有高亮选区,则将光标所在处的词作为选区,由前后空格或“,”“.”等标点符号区分词。(b) cursor.mergeCharFormat(format):调用QTextCursor的mergeCharFormat()函数将参数format所表示的格式应用到光标所在处的字符上。(c) showWidget-text-mergeCurrentCharFormat(format):调用QTextEdit的merge CurrentChar Format()函数将格式应用到选区内的所有字符上。02设 置 字 号设

50、置 字 号设置选定文字字号大小的ShowSizeSpinBox()函数代码如下:void ImgProcessor:ShowSizeSpinBox(QString spinValue)/设置字号 QTextCharFormat fmt; fmt.setFontPointSize(spinValue.toFloat(); showWidget-text-mergeCurrentCharFormat(fmt);03设置文字加粗设置文字加粗设置选定文字为加粗显示的ShowBoldBtn()函数代码如下:void ImgProcessor:ShowBoldBtn() /设置文字显示加粗 QTextCh

51、arFormat fmt; fmt.setFontWeight(boldBtn-isChecked()?QFont:Bold:QFont: Normal); showWidget-text-mergeCurrentCharFormat(fmt);其中,调用QTextCharFormat的setFontWeight()函数设置粗细值,若检测到“加粗”按钮被按下,则设置字符的Weight值为QFont:Bold,可直接设为75;反之,则设为QFont:Normal。文字的粗细值由QFont:Weight表示,它是一个整型值,取值的范围可为099,有5个预置值,分别为QFont:Light(25)、

52、QFont:Normal(50)、QFont:DemiBold(63)、QFont:Bold(75)和QFont:Black(87),通常在QFont:Normal和QFont:Bold之间转换。04设置文字斜体设置文字斜体设置选定文字为斜体显示的ShowItalicBtn()函数代码如下:void ImgProcessor:ShowItalicBtn()/设置文字显示斜体 QTextCharFormat fmt; fmt.setFontItalic(italicBtn-isChecked(); showWidget-text-mergeCurrentCharFormat(fmt);05设置文

53、字加下画线设置文字加下画线在选定文字下方加下画线的ShowUnderlineBtn()函数代码如下:void ImgProcessor:ShowUnderlineBtn()/设置文字加下画线 QTextCharFormat fmt; fmt.setFontUnderline(underlineBtn-isChecked(); showWidget-text-mergeCurrentCharFormat(fmt);06设置文字颜色设置文字颜色设置选定文字颜色的ShowColorBtn()函数代码如下:void ImgProcessor:ShowColorBtn()/设置文字颜色QColor co

54、lor=QColorDialog:getColor(Qt:red,this);/(a)if(color.isValid() QTextCharFormat fmt; fmt.setForeground(color); showWidget-text-mergeCurrentCharFormat(fmt); 在“imgprocessor.cpp”文件的开头添加声明:#include #include 设置文字颜色标准颜色对话框QColorDialog类的使用:QColor getColor( const QColor& initial=Qt:white, QWidget* parent=0);

55、第1个参数指定了选中的颜色,默认为白色。通过QColor:isValid()可以判断用户选择的颜色是否有效,若用户单击“取消”(Cancel)按钮,则QColor:isValid()返回false。第2个参数定义了标准颜色对话框的父窗口。07设置字符格式设置字符格式当光标所在处的字符格式发生变化时调用此槽函数,函数根据新的字符格式将工具栏上各个格式控件的显示更新。void ImgProcessor:ShowCurrentFormatChanged(const QTextCharFormat &fmt)fontComboBox-setCurrentIndex(fontComboBox-findT

56、ext(fmt .fontFamily(); sizeComboBox-setCurrentIndex(sizeComboBox-findText( QString:number(fmt.fontPointSize(); boldBtn-setChecked(fmt.font().bold(); italicBtn-setChecked(fmt.fontItalic(); underlineBtn-setChecked(fmt.fontUnderline();第5章 Qt 5主窗口Qt 5排版功能Qt 5排版功能具体实现步骤如下。(1)在“imgprocessor.h”头文件中添加“priva

57、te:”变量:QLabel *listLabel; /排序设置项QComboBox *listComboBox;QActionGroup *actGrp;QAction *leftAction;QAction *rightAction;QAction *centerAction;QAction *justifyAction;QToolBar *listToolBar; /排序工具栏(2)在“imgprocessor.h”头文件中添加“protected slots:”变量:void ShowList(int);void ShowAlignment(QAction *act);void Show

58、CursorPositionChanged();Qt 5排版功能(3)在相对应的构造函数中,在语句“setCentralWidget(showWidget);”与语句“createActions();”之间添加如下代码:/排序listLabel =new QLabel(tr(排序); listComboBox =new QComboBox;listComboBox-addItem(Standard);listComboBox-addItem(QTextListFormat:ListDisc);listComboBox-addItem(QTextListFormat:ListCircle);li

59、stComboBox-addItem(QTextListFormat:ListSquare);listComboBox-addItem(QTextListFormat:ListDecimal);listComboBox-addItem(QTextListFormat:ListLowerAlpha);listComboBox-addItem(QTextListFormat:ListUpperAlpha);listComboBox-addItem(QTextListFormat:ListLowerRoman);listComboBox-addItem(QTextListFormat:ListUpp

60、erRoman);(4)在构造函数的最后添加相关的事件关联:connect(listComboBox,SIGNAL(activated(int),this,SLOT(ShowList(int);connect(showWidget-text-document(),SIGNAL(undoAvailable(bool), redoAction,SLOT(setEnabled(bool);connect(showWidget-text-document(),SIGNAL(redoAvailable(bool), redoAction,SLOT(setEnabled(bool);connect(sho

温馨提示

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

评论

0/150

提交评论