




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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),是许多应用程序的基础 ,如文本编辑器、图片编辑器等。其界面布局如图6.1所示。 介绍了利用标准文件对话框QFileDialog打开一个已存在的文件的使用方法 、利用QFile和QTextStream读取文件内容的使用方法。 图像处理软件中的常用功能有打印图像、图片的缩放、旋转以及镜像等坐 标变换,本章通过本实例介绍标准打印对话框QPrintDialog的使用方法、以 QPrinter作为QPaintDevice画图实现图像打印以及使用QMatrix实现图像的各种坐 标变换。 其次,通过在工具栏上设置文字字体、字号大小、加粗、斜体、下画线以 及字体颜色等快捷按钮的实现介绍了在工具栏中嵌入控件的方法,其中,通过 设置字体颜色功能介绍了标准颜色对话框QColorDialog类的使用方法,通过选择 某种排序方式实现对文本排序的方法,以及实现文本对齐(包括左对齐、右对 齐、居中和两端对齐)和撤销、恢复的方法。见程序源代码CH601。 最终实现的效果如图6.2所示。 下面是主窗口构造函数部分内容,构造函数主要实现窗体的初始化,打开 “imgprocessor.cpp”文件,添加如下代码: ImgProcessor:ImgProcessor(QWidget *parent) : QMainWindow(parent) setWindowTitle(tr(“Image Processor“); showWidget =new ShowWidget(this); setCentralWidget(showWidget); createActions(); createMenus(); createToolBars(); if(img.load(“image.png“) showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); 实现打开文件和新建文件的动作(Action)的实现代码。 实现打印文本以及打印图像、图像缩放的动作(Action)的实现代码。 在实现了各个动作之后,需要把它通过菜单以及工具栏快捷键的方式体现出 来,以下是菜单的实现函数createMenus(): 接下来实现相对应的工具栏createToolBars(),主窗口的工具栏上可以有多个 工具条,一般采用一个菜单对应一个工具条的方式,也可根据需要进行工具条的 划分。 工具条是一个可移动的窗口,它可停靠的区域由QToolBar的allowAreas决定, 包括Qt:LeftToolBarArea、Qt:RightToolBarArea、Qt:TopToolBarArea、 Qt:BottomToolBarArea和Qt:AllToolBarAreas。默认为Qt:AllToolBarAreas,启动默 认出现于主窗口的顶部。可通过调用setAllowAreas()函数来指定工具条可停靠的区 域,如: fileToolBar-setAllowAreas(Qt:TopToolBarArea|Qt:LeftToolBarArea); 此函数限定文件工具条只可出现在主窗口的顶部或左侧。工具条也可通过调 用setMovable()函数设定工具条的可移动性,如: fileToolBar-setMovable(false); 打开“main.cpp”文件,添加如下加黑代码: #include #include “imgprocessor.h“ #include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); /显示中文 ImgProcessor w; w.show(); return a.exec(); 将程序中用到的图片保存到该工程下的debug文件夹中,运行程序,结果如 图6.3所示。 下面将介绍如何实现新建一个空白文件的功能。 (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 ImgProcessor; newImgProcessor-show(); (4)运行程序,单击“文件”“New”命令或单击工具栏上的新建按钮,弹出新的 文件编辑窗口,如图6.4所示。 若当前中央窗体中已有打开的文件,则在一个新的窗口中打开选定的文件; 若当前中央窗体是空白的,则在当前窗体中打开。 imgprocessor.h”头文件中添加“protected slots:”变量: void ShowOpenFile(); 在createActions()函数的“打开动作”最后添加事件关联: connect(openFileAction,SIGNAL(triggered(),this,SLOT(ShowOpenFile(); 实现打开文件功能的函数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(); newImgProcessor-loadFile(fileName); 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( while(!textStream.atEnd() showWidget-text-append(textStream.readLine(); printf(“read linen“); printf(“endn“); 在此只详细说明标准文件对话框QFileDialog的getOpenFileName()静态函数各 个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。 QString QFileDialog:getOpenFileName ( QWidget* parent=0, const QString 6.4.1 文本打印 打印文本在文本编辑工作中经常使用,下面将介绍如何实现文本打印功能 。实现后的效果如图6.6所示。 具体实现步骤如下: (1) 在头文件中添加“protected slots:”变量: void ShowPrintText(); (2) 在createActions()函数的最后添加事件关联: connect(PrintTextAction,SIGNAL(triggered(),this,SLOT(ShowPrintText(); (3) 实现打开文件功能的函数ShowPrintText ()具体内容如下: void ImgProcessor:ShowPrintText() QPrinter printer; QPrintDialog printDialog( if(printDialog.exec() QTextDocument *doc =showWidget-text-document(); doc-print( (4) 在该源文件的开始部分添加如下头文件: #include #include (5) 运行程序,单击“文件”“PrintText”命令或单击工具栏上的打印文本按钮 ,弹出标准打印对话框,如图6.6所示。 打印图像实际上是在一个QPaintDevice中画图,与平常在QWidget、QPixmap 和QImage中画图一样,都是创建一个QPainter对象进行画图,只是打印使用的是 QPrinter,QPrinter本质上也是一个绘图设备QPaintDevice。下面将介绍如何实现图 像打印功能。 (1) 在头文件中添加“protected slots:”变量: void ShowPrintImage(); (2) 在createActions()函数的最后添加事件关联: connect(PrintImageAction,SIGNAL(triggered(),this,SLOT(ShowPrintImage(); (3) 实现打开文件功能的函数ShowPrintImage ()具体内容如下: void ImgProcessor:ShowPrintImage() QPrinter printer; QPrintDialog printDialog( if(printDialog.exec() QPainter painter( QRect rect =painter.viewport(); QSize size = img.size(); size.scale(rect.size(),Qt:KeepAspectRatio); painter.setViewport(rect.x(),rect.y(),size.width(),size.height(); painter.setWindow(img.rect(); painter.drawImage(0,0,img); (4) 运行程序,单击“文件”“PrintImage”命令或单击工具栏上的打印文本按 钮,弹出标准打印对话框,如图6.6所示。 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.scale(2,2); img = img.transformed(martix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); (4) 在头文件中添加“protected slots:”变量: void ShowZoomOut(); (5) 在createActions()函数的最后添加事件关联: connect(zoomOutAction,SIGNAL(triggered(),this,SLOT(ShowZoomOut(); (6) 实现缩小功能的函数ShowZoomOut()具体内容如下: void ImgProcessor:ShowZoomOut() if(img.isNull() return; QMatrix matrix; matrix.scale(0.5,0.5); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); (1) 在头文件中添加“protected slots:”变量: void ShowRotate90(); (2) 在createActions()函数的最后添加事件关联: connect(rotate90Action,SIGNAL(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); (3) 在头文件中添加“protected slots:”变量: void ShowRotate180(); void ShowRotate270(); (4) 在createActions()函数的最后添加事件关联: connect(rotate180Action,SIGNAL(triggered(),this,SLOT(ShowRotate180(); connect(rotate270Action,SIGNAL(triggered(),this,SLOT(ShowRotate270(); (5) 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:ShowRotate270() if(img.isNull() return; QMatrix matrix; matrix.rotate(270); img = img.transformed(matrix); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); (1) 在头文件中添加“protected slots:”变量: void ShowMirrorVertical(); void ShowMirrorHorizontal(); (2) 在createActions()函数的最后添加事件关联: connect(mirrorVerticalAction,SIGNAL(triggered(),this,SLOT(ShowMirrorVertical(); connect(mirrorHorizontalAction,SIGNAL(triggered(),this,SLOT(ShowMirrorHorizonta l(); (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.isNull() return; img=img.mirrored(true,false); showWidget-imageLabel-setPixmap(QPixmap:fromImage(img); (4) 此时运行程序,可将图片进行镜像。 各类之间的划分与关系可用图6.7表示。 实现文本编辑的具体操作步骤如下: (1) 在头文件添加“private:”变量: QLabel *fontLabel1; /字体设置项 QFontComboBox *fontComboBox; QLabel *fontLabel2; QComboBox *sizeComboBox; 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 ShowUnderlineBtn(); void ShowColorBtn(); void ShowCurrentFormatChanged(const QTextCharFormat (3) 相对应的构造函数中在语句“setCentralWidget(showWidget);”与语句 “createActions();”之间添加如下代码: (4) 在该构造函数的最后部分加上相关的事件关联: connect(fontComboBox,SIGNAL(activated(QString), this,SLOT(ShowFontComboBox(QString); connect(sizeComboBox,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(ShowColorBtn(); connect(showWidget- text,SIGNAL(currentCharFormatChanged(QtextCharFormat (5) 相对应的工具栏createToolBars()函数中添加如下代码: /字体工具栏 fontToolBar =addToolBar(“Font“); /“control“ fontToolBar-addWidget(fontLabel1); fontToolBar-addWidget(fontComboBox); fontToolBar-addWidget(fontLabel2); fontToolBar-addWidget(sizeComboBox); fontToolBar-addSeparator(); fontToolBar-addWidget(boldBtn); fontToolBar-addWidget(italicBtn); fontToolBar-addWidget(underlineBtn); fontToolBar-addSeparator(); fontToolBar-addWidget(colorBtn); 完成设置选定文字字体的工作ShowFontComboBox()函数: void ImgProcessor:ShowFontComboBox(QString 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(QTextCursor:WordUnderCursor); cursor.mergeCharFormat(format); showWidget-text-mergeCurrentCharFormat(format); 设置选定文字的字号大小ShowSizeSpinBox()函数: void ImgProcessor:ShowSizeSpinBox(QString spinValue)/设置字号 QTextCharFormat fmt; fmt.setFontPointSize(spinValue.toFloat(); showWidget-text-mergeCurrentCharFormat(fmt); 设置选定文字为加粗显示ShowBoldBtn()函数: void ImgProcessor:ShowBoldBtn() /设置文字显示加粗 QTextCharFormat fmt; fmt.setFontWeight(boldBtn-isChecked()?QFont:Bold:QFont:Normal); showWidget-text-mergeCurrentCharFormat(fmt); 设置选定文字为斜体显示ShowItalicBtn()函数: void ImgProcessor:ShowItalicBtn()/设置文字显示斜体 QTextCharFormat fmt; fmt.setFontItalic(italicBtn-isChecked(); showWidget-text-mergeCurrentCharFormat(fmt); 在选定文字下方加下画线ShowUnderlineBtn()函数: void ImgProcessor:ShowUnderlineBtn()/设置文字加下画线 QTextCharFormat fmt; fmt.setFontUnderline(underlineBtn-isChecked(); showWidget-text-mergeCurrentCharFormat(fmt); 设置选定文字的颜色ShowColorBtn()函数: void ImgProcessor:ShowColorBtn()/设置文字颜色 QColor color=QColorDialog:getColor(Qt:red,this); if(color.isValid() QTextCharFormat fmt; fmt.setForeground(color); showWidget-text-mergeCurrentCharFormat(fmt); 当光标所在处的字符格式发生变化时调用此槽函数,函数根据新的字符格式 把工具栏上各个格式控件的显示更新。 void ImgProcessor:ShowCurrentFormatChanged(const QTextCharFormat sizeComboBox-setCurrentIndex(sizeComboBox-findText( QString:number(fmt.fontPointSize(); boldBtn-setChecked(fmt.font().bold(); italicBtn-setChecked(fmt.fontItalic(); underlineBtn-setChecked(fmt.fontUnderline(); 6.7.1 实现段落对齐功能 完成对按下某个对齐按钮的响应ShowAlignment
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第1节 电功教学设计-2025-2026学年初中物理沪科版五四学制2024九年级上册-沪科版五四学制2024
- Lesson 2 Different Kinds of Language教学设计-2025-2026学年初中英语北师大版2013九年级全册-北师大版2013
- 7.1 自然特征与农业 说课稿-2025-2026学年八年级地理下学期人教版
- 2.2 圆柱的表面积 (教学设计)-六年级下册数学(西师大版)
- 9.2溶解度(第二课时)说课稿 -2025-2026学年九年级化学人教版下册
- 2025年体育教师招聘考试专业知识考试选择题库(附答案)
- 第五节 循迹机器人教学设计-2025-2026学年初中信息技术甘教版2022八年级下册-甘教版2022
- Module 7 Unit 1 Are there many children in your class(教学设计)-2023-2024学年外研版(一起)英语三年级下册
- 蒸发和液化课件
- 2025电子产品买卖合同合同范本
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 从+“心”+出发遇见更好的自己-开学第一课暨心理健康教育主题班会-2025-2026学年高中主题班会
- 2025年苏教版新教材数学二年级上册教学计划(含进度表)
- 大众文化概论-课件
- 安全风险辨识与分级管控制度
- 【无线射频电路】-微波笔记·糖葫芦低通滤波器的设计
- 机械加工切削参数表
- 供应商现场考核记录
- 视频拍摄入门(上)课件
- 基础培训s8课件
- 美林时钟的自我救赎
评论
0/150
提交评论