QmainWindow主窗体.ppt

上传人:za****8 文档编号:14653015 上传时间:2020-07-27 格式:PPT 页数:42 大小:3.67MB
收藏 版权申诉 举报 下载
QmainWindow主窗体.ppt_第1页
第1页 / 共42页
QmainWindow主窗体.ppt_第2页
第2页 / 共42页
QmainWindow主窗体.ppt_第3页
第3页 / 共42页
资源描述:

《QmainWindow主窗体.ppt》由会员分享,可在线阅读,更多相关《QmainWindow主窗体.ppt(42页珍藏版)》请在装配图网上搜索。

1、第6章 QmainWindow主窗体,6.1 创建菜单的菜单、工具栏以及动作,6.2 新建文件,6.3 标准文件对话框(QFileDialog),6.4 标准打印对话框(QPrintDialog),6.5 QMatrix实现图像坐标变换,6.6 文本编辑,6.7 实现段落对齐及文本排序功能,QMainWindow是一个为用户提供主窗口程序的类,可包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)以及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器、图片编辑器等。其界面

2、布局如图6.1所示。,介绍了利用标准文件对话框QFileDialog打开一个已存在的文件的使用方法、利用QFile和QTextStream读取文件内容的使用方法。 图像处理软件中的常用功能有打印图像、图片的缩放、旋转以及镜像等坐标变换,本章通过本实例介绍标准打印对话框QPrintDialog的使用方法、以QPrinter作为QPaintDevice画图实现图像打印以及使用QMatrix实现图像的各种坐标变换。 其次,通过在工具栏上设置文字字体、字号大小、加粗、斜体、下画线以及字体颜色等快捷按钮的实现介绍了在工具栏中嵌入控件的方法,其中,通过设置字体颜色功能介绍了标准颜色对话框QColorDia

3、log类的使用方法,通过选择某种排序方式实现对文本排序的方法,以及实现文本对齐(包括左对齐、右对齐、居中和两端对齐)和撤销、恢复的方法。见程序源代码CH601。 最终实现的效果如图6.2所示。,6.1 创建菜单的菜单、工具栏以及动作,下面是主窗口构造函数部分内容,构造函数主要实现窗体的初始化,打开“imgprocessor.cpp”文件,添加如下代码: ImgProcessor:ImgProcessor(QWidget *parent) : QMainWindow(parent) setWindowTitle(tr(Image Processor); showWidget =new ShowW

4、idget(this); setCentralWidget(showWidget); createActions(); createMenus(); createToolBars(); if(img.load(image.png) showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); ,6.1.1 动作(Action)的实现,实现打开文件和新建文件的动作(Action)的实现代码。 实现打印文本以及打印图像、图像缩放的动作(Action)的实现代码。,6.1.2 菜单(Menus)的实现,在实现了各个动作之后,需要把它通过菜单以及工具栏

5、快捷键的方式体现出来,以下是菜单的实现函数createMenus():,6.1.3 工具栏(ToolBars)的实现,接下来实现相对应的工具栏createToolBars(),主窗口的工具栏上可以有多个工具条,一般采用一个菜单对应一个工具条的方式,也可根据需要进行工具条的划分。 工具条是一个可移动的窗口,它可停靠的区域由QToolBar的allowAreas决定,包括Qt:LeftToolBarArea、Qt:RightToolBarArea、Qt:TopToolBarArea、Qt:BottomToolBarArea和Qt:AllToolBarAreas。默认为Qt:AllToolBarAr

6、eas,启动默认出现于主窗口的顶部。可通过调用setAllowAreas()函数来指定工具条可停靠的区域,如: fileToolBar-setAllowAreas(Qt:TopToolBarArea|Qt:LeftToolBarArea); 此函数限定文件工具条只可出现在主窗口的顶部或左侧。工具条也可通过调用setMovable()函数设定工具条的可移动性,如: fileToolBar-setMovable(false);,6.1.3 工具栏(ToolBars)的实现,打开“main.cpp”文件,添加如下加黑代码: #include #include imgprocessor.h #incl

7、ude int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); /显示中文 ImgProcessor w; w.show(); return a.exec(); ,6.1.3 工具栏(ToolBars)的实现,将程序中用到的图片保存到该工程下的debug文件夹中,运行程序,结果如图6.3所示。,6.2 新建文件,下面将介绍如何实现新建一个空白文件的功能。 (1)打开“imgprocessor.h”头文件,添加“protecte

8、d slots:”变量: protected slots: void ShowNewFile(); (2)在createActions()函数的“新建动作”最后添加事件关联: connect(NewFileAction,SIGNAL(triggered(),this,SLOT(ShowNewFile(); (3)实现新建文件功能的函数ShowNewFile()具体内容如下: void ImgProcessor:ShowNewFile() ImgProcessor *newImgProcessor =new ImgProcessor; newImgProcessor-show(); ,6.2 新

9、建文件,(4)运行程序,单击“文件”“New”命令或单击工具栏上的新建按钮,弹出新的文件编辑窗口,如图6.4所示。,6.3 标准文件对话框(QFileDialog),若当前中央窗体中已有打开的文件,则在一个新的窗口中打开选定的文件;若当前中央窗体是空白的,则在当前窗体中打开。 imgprocessor.h”头文件中添加“protected slots:”变量: void ShowOpenFile(); 在createActions()函数的“打开动作”最后添加事件关联: connect(openFileAction,SIGNAL(triggered(),this,SLOT(ShowOpenFi

10、le();,6.3 标准文件对话框(QFileDialog), 实现打开文件功能的函数ShowNewFile()具体内容如下: void ImgProcessor:ShowOpenFile() fileName =QFileDialog:getOpenFileName(this); if(!fileName.isEmpty() if(showWidget-text-document()-isEmpty() loadFile(fileName); else ImgProcessor *newImgProcessor =new ImgProcessor; newImgProcessor-show(

11、); newImgProcessor-loadFile(fileName); ,6.3 标准文件对话框(QFileDialog),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( ,6.3

12、 标准文件对话框(QFileDialog),在此只详细说明标准文件对话框QFileDialog的getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。 QString QFileDialog:getOpenFileName ( QWidget* parent=0, const QString ,6.4 标准打印对话框(QPrintDialog),6.4.1 文本打印 打印文本在文本编辑工作中经常使用,下面将介绍如何实现文本打印功能。实现后的效果如图6.6所示。,6.4.1 文本打印,具体实现步骤如下: (1) 在头文件中添加“prote

13、cted slots:”变量: void ShowPrintText(); (2) 在createActions()函数的最后添加事件关联: connect(PrintTextAction,SIGNAL(triggered(),this,SLOT(ShowPrintText(); (3) 实现打开文件功能的函数ShowPrintText ()具体内容如下: void ImgProcessor:ShowPrintText() QPrinter printer; QPrintDialog printDialog( ,6.4.1 文本打印,(4) 在该源文件的开始部分添加如下头文件: #includ

14、e #include (5) 运行程序,单击“文件”“PrintText”命令或单击工具栏上的打印文本按钮,弹出标准打印对话框,如图6.6所示。,6.4.2 图像打印,打印图像实际上是在一个QPaintDevice中画图,与平常在QWidget、QPixmap和QImage中画图一样,都是创建一个QPainter对象进行画图,只是打印使用的是QPrinter,QPrinter本质上也是一个绘图设备QPaintDevice。下面将介绍如何实现图像打印功能。 (1) 在头文件中添加“protected slots:”变量: void ShowPrintImage(); (2) 在createAct

15、ions()函数的最后添加事件关联: connect(PrintImageAction,SIGNAL(triggered(),this,SLOT(ShowPrintImage();,6.4.2 图像打印,(3) 实现打开文件功能的函数ShowPrintImage ()具体内容如下: void ImgProcessor:ShowPrintImage() QPrinter printer; QPrintDialog printDialog( (4) 运行程序,单击“文件”“PrintImage”命令或单击工具栏上的打印文本按钮,弹出标准打印对话框,如图6.6所示。,6.5 QMatrix实现图像坐

16、标变换,6.5.1 缩放功能 下面将介绍如何实现缩放功能。实现步骤如下: (1) 在头文件中添加“protected slots:”变量: void ShowZoomIn(); (2) 在createActions()函数的最后添加事件关联: connect(zoomInAction,SIGNAL(triggered(),this,SLOT(ShowZoomIn(); (3) 实现图形的放大功能的函数ShowZoomIn()具体内容: void ImgProcessor:ShowZoomIn() if(img.isNull() return; QMatrix martix; martix.sc

17、ale(2,2); img = img.transformed(martix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); ,6.5.1 缩放功能,(4) 在头文件中添加“protected slots:”变量: void ShowZoomOut(); (5) 在createActions()函数的最后添加事件关联: connect(zoomOutAction,SIGNAL(triggered(),this,SLOT(ShowZoomOut(); (6) 实现缩小功能的函数ShowZoomOut()具体内容如下: void

18、ImgProcessor:ShowZoomOut() if(img.isNull() return; QMatrix matrix; matrix.scale(0.5,0.5); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); ,6.5.2 旋转功能,(1) 在头文件中添加“protected slots:”变量: void ShowRotate90(); (2) 在createActions()函数的最后添加事件关联: connect(rotate90Action,S

19、IGNAL(triggered(),this,SLOT(ShowRotate90(); ShowRotate90()函数具体实现代码如下: void ImgProcessor:ShowRotate90() if(img.isNull() return; QMatrix matrix; matrix.rotate(90); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); ,6.5.2 旋转功能,(3) 在头文件中添加“protected slots:”变量: void S

20、howRotate180(); void ShowRotate270(); (4) 在createActions()函数的最后添加事件关联: connect(rotate180Action,SIGNAL(triggered(),this,SLOT(ShowRotate180(); connect(rotate270Action,SIGNAL(triggered(),this,SLOT(ShowRotate270();,6.5.2 旋转功能,(5) ShowRotate180()、ShowRotate270()函数具体实现代码如下: void ImgProcessor:ShowRotate180

21、() if(img.isNull() return; QMatrix matrix; matrix.rotate(180); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); void ImgProcessor:ShowRotate270() if(img.isNull() return; QMatrix matrix; matrix.rotate(270); img = img.transformed(matrix); showWidget-imageLabel-set

22、Pixmap(QPixmap:fromImage(img); ,6.5.3 镜像功能,(1) 在头文件中添加“protected slots:”变量: void ShowMirrorVertical(); void ShowMirrorHorizontal(); (2) 在createActions()函数的最后添加事件关联: connect(mirrorVerticalAction,SIGNAL(triggered(),this,SLOT(ShowMirrorVertical(); connect(mirrorHorizontalAction,SIGNAL(triggered(),this,

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

24、Null() return; img=img.mirrored(true,false); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); (4) 此时运行程序,可将图片进行镜像。,6.6 文本编辑,各类之间的划分与关系可用图6.7表示。,6.6 文本编辑,实现文本编辑的具体操作步骤如下: (1) 在头文件添加“private:”变量: QLabel *fontLabel1; /字体设置项 QFontComboBox *fontComboBox; QLabel *fontLabel2; QComboBox *sizeComboBox

25、; QToolButton *boldBtn; QToolButton *italicBtn; QToolButton *underlineBtn; QToolButton *colorBtn; QToolBar *fontToolBar; /字体工具栏 (2) 在头文件添加“protected slots:”变量: void ShowFontComboBox(QString comboStr); void ShowSizeSpinBox(QString spinValue); void ShowBoldBtn(); void ShowItalicBtn(); void ShowUnderli

26、neBtn(); void ShowColorBtn(); void ShowCurrentFormatChanged(const QTextCharFormat ,6.6 文本编辑,(3) 相对应的构造函数中在语句“setCentralWidget(showWidget);”与语句“createActions();”之间添加如下代码: (4) 在该构造函数的最后部分加上相关的事件关联: connect(fontComboBox,SIGNAL(activated(QString), this,SLOT(ShowFontComboBox(QString); connect(sizeComboBo

27、x,SIGNAL(activated(QString), this,SLOT(ShowSizeSpinBox(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(Sho

28、wColorBtn(); connect(showWidget-text,SIGNAL(currentCharFormatChanged(QtextCharFormat,6.6 文本编辑,(5) 相对应的工具栏createToolBars()函数中添加如下代码: /字体工具栏 fontToolBar =addToolBar(Font); /control fontToolBar-addWidget(fontLabel1); fontToolBar-addWidget(fontComboBox); fontToolBar-addWidget(fontLabel2); fontToolBar-ad

29、dWidget(sizeComboBox); fontToolBar-addSeparator(); fontToolBar-addWidget(boldBtn); fontToolBar-addWidget(italicBtn); fontToolBar-addWidget(underlineBtn); fontToolBar-addSeparator(); fontToolBar-addWidget(colorBtn);,6.6.1 设置字体功能,完成设置选定文字字体的工作ShowFontComboBox()函数: void ImgProcessor:ShowFontComboBox(QS

30、tring comboStr)/设置字体 QTextCharFormat fmt; fmt.setFontFamily(comboStr); mergeFormat(fmt); /把新的格式应用到光标选区内的字符 所有对于QTextDocument进行的修改都通过QTextCursor类来完成。 void ImgProcessor:mergeFormat(QTextCharFormat format) QTextCursor cursor =showWidget-text-textCursor(); if(!cursor.hasSelection() cursor.select(QTextCu

31、rsor:WordUnderCursor); cursor.mergeCharFormat(format); showWidget-text-mergeCurrentCharFormat(format); ,6.6.2 设置字号功能,设置选定文字的字号大小ShowSizeSpinBox()函数: void ImgProcessor:ShowSizeSpinBox(QString spinValue)/设置字号 QTextCharFormat fmt; fmt.setFontPointSize(spinValue.toFloat(); showWidget-text-mergeCurrentCh

32、arFormat(fmt); ,6.6.3 设置文字加粗功能,设置选定文字为加粗显示ShowBoldBtn()函数: void ImgProcessor:ShowBoldBtn() /设置文字显示加粗 QTextCharFormat fmt; fmt.setFontWeight(boldBtn-isChecked()?QFont:Bold:QFont:Normal); showWidget-text-mergeCurrentCharFormat(fmt); ,6.6.4 设置文字斜体功能,设置选定文字为斜体显示ShowItalicBtn()函数: void ImgProcessor:ShowI

33、talicBtn()/设置文字显示斜体 QTextCharFormat fmt; fmt.setFontItalic(italicBtn-isChecked(); showWidget-text-mergeCurrentCharFormat(fmt); ,6.6.5 设置文字加下画线功能,在选定文字下方加下画线ShowUnderlineBtn()函数: void ImgProcessor:ShowUnderlineBtn()/设置文字加下画线 QTextCharFormat fmt; fmt.setFontUnderline(underlineBtn-isChecked(); showWidg

34、et-text-mergeCurrentCharFormat(fmt); ,6.6.6 设置文字颜色功能及标准颜色对话框(QColorDialog),设置选定文字的颜色ShowColorBtn()函数: void ImgProcessor:ShowColorBtn()/设置文字颜色 QColor color=QColorDialog:getColor(Qt:red,this); if(color.isValid() QTextCharFormat fmt; fmt.setForeground(color); showWidget-text-mergeCurrentCharFormat(fmt)

35、; ,6.6.7 设置字符格式功能,当光标所在处的字符格式发生变化时调用此槽函数,函数根据新的字符格式把工具栏上各个格式控件的显示更新。 void ImgProcessor:ShowCurrentFormatChanged(const QTextCharFormat ,6.7 实现段落对齐及文本排序功能,6.7.1 实现段落对齐功能 完成对按下某个对齐按钮的响应ShowAlignment()函数,根据比较判断触发的是哪个对齐按钮,调用QTextEdit的setAlignment函数可以实现当前段落的对齐调整。具体代码如下: void ImgProcessor:ShowAlignment(QAc

36、tion *act) if(act=leftAction) showWidget-text-setAlignment(Qt:AlignLeft); if(act=rightAction) showWidget-text-setAlignment(Qt:AlignRight); if(act=centerAction) showWidget-text-setAlignment(Qt:AlignCenter); if(act=justifyAction) showWidget-text-setAlignment(Qt:AlignJustify); ,6.7.1 实现段落对齐功能,响应文本中光标位置

37、发生改变的信号ShowCursorPositionChanged()函数: void ImgProcessor:ShowCursorPositionChanged() if(showWidget-text-alignment()=Qt:AlignLeft) leftAction-setChecked(true); if(showWidget-text-alignment()=Qt:AlignRight) rightAction-setChecked(true); if(showWidget-text-alignment()=Qt:AlignCenter) centerAction-setChe

38、cked(true); if(showWidget-text-alignment()=Qt:AlignJustify) justifyAction-setChecked(true); ,6.7.2 实现文本排序功能,介绍一下文本排序功能实现的基本流程,如图6.8所示。,6.7.2 实现文本排序功能,本实例采用的也是在程序中通过获取当前文本段QTextBlockFormat的缩进值来进行相应的计算,以获得排序文本的缩进值。 最后,打开“main.cpp”文件,具体代码如下(注意加黑代码与前面不同): #include #include imgprocessor.h #include int main(int argc, char *argv) QApplication a(argc, argv); QFont f(ZYSong18030,12); /设置显示的字体格式 a.setFont(f); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); ImgProcessor w; w.show(); return a.exec(); ,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!