QmainWindow主窗体.ppt_第1页
QmainWindow主窗体.ppt_第2页
QmainWindow主窗体.ppt_第3页
QmainWindow主窗体.ppt_第4页
QmainWindow主窗体.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第6章QmainWindow主窗体,6.1创建菜单的菜单、工具栏以及动作,6.2新建文件,6.3标准文件对话框(QFileDialog),6.4标准打印对话框(QPrintDialog),6.5QMatrix实现图像坐标变换,6.6文本编辑,6.7实现段落对齐及文本排序功能,QMainWindow是一个为用户提供主窗口程序的类,可包含一个菜单栏(menubar)、多个工具栏(toolbars)、多个锚接部件(dockwidgets)、一个状态栏(statusbar)以及一个中心部件(centralwidget),是许多应用程序的基础,如文本编辑器、图片编辑器等。其界面布局如图6.1所示。,介绍了利用标准文件对话框QFileDialog打开一个已存在的文件的使用方法、利用QFile和QTextStream读取文件内容的使用方法。图像处理软件中的常用功能有打印图像、图片的缩放、旋转以及镜像等坐标变换,本章通过本实例介绍标准打印对话框QPrintDialog的使用方法、以QPrinter作为QPaintDevice画图实现图像打印以及使用QMatrix实现图像的各种坐标变换。其次,通过在工具栏上设置文字字体、字号大小、加粗、斜体、下画线以及字体颜色等快捷按钮的实现介绍了在工具栏中嵌入控件的方法,其中,通过设置字体颜色功能介绍了标准颜色对话框QColorDialog类的使用方法,通过选择某种排序方式实现对文本排序的方法,以及实现文本对齐(包括左对齐、右对齐、居中和两端对齐)和撤销、恢复的方法。见程序源代码CH601。最终实现的效果如图6.2所示。,6.1创建菜单的菜单、工具栏以及动作,下面是主窗口构造函数部分内容,构造函数主要实现窗体的初始化,打开“imgprocessor.cpp”文件,添加如下代码:ImgProcessor:ImgProcessor(QWidget*parent):QMainWindow(parent)setWindowTitle(tr(ImageProcessor);showWidget=newShowWidget(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)的实现,在实现了各个动作之后,需要把它通过菜单以及工具栏快捷键的方式体现出来,以下是菜单的实现函数createMenus():,6.1.3工具栏(ToolBars)的实现,接下来实现相对应的工具栏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);,6.1.3工具栏(ToolBars)的实现,打开“main.cpp”文件,添加如下加黑代码:#include#includeimgprocessor.h#includeintmain(intargc,char*argv)QApplicationa(argc,argv);QTextCodec:setCodecForTr(QTextCodec:codecForLocale();/显示中文ImgProcessorw;w.show();returna.exec();,6.1.3工具栏(ToolBars)的实现,将程序中用到的图片保存到该工程下的debug文件夹中,运行程序,结果如图6.3所示。,6.2新建文件,下面将介绍如何实现新建一个空白文件的功能。(1)打开“imgprocessor.h”头文件,添加“protectedslots:”变量:protectedslots:voidShowNewFile();(2)在createActions()函数的“新建动作”最后添加事件关联:connect(NewFileAction,SIGNAL(triggered(),this,SLOT(ShowNewFile();(3)实现新建文件功能的函数ShowNewFile()具体内容如下:voidImgProcessor:ShowNewFile()ImgProcessor*newImgProcessor=newImgProcessor;newImgProcessor-show();,6.2新建文件,(4)运行程序,单击“文件”“New”命令或单击工具栏上的新建按钮,弹出新的文件编辑窗口,如图6.4所示。,6.3标准文件对话框(QFileDialog),若当前中央窗体中已有打开的文件,则在一个新的窗口中打开选定的文件;若当前中央窗体是空白的,则在当前窗体中打开。imgprocessor.h”头文件中添加“protectedslots:”变量:voidShowOpenFile();在createActions()函数的“打开动作”最后添加事件关联:connect(openFileAction,SIGNAL(triggered(),this,SLOT(ShowOpenFile();,6.3标准文件对话框(QFileDialog),实现打开文件功能的函数ShowNewFile()具体内容如下:voidImgProcessor:ShowOpenFile()fileName=QFileDialog:getOpenFileName(this);if(!fileName.isEmpty()if(showWidget-text-document()-isEmpty()loadFile(fileName);elseImgProcessor*newImgProcessor=newImgProcessor;newImgProcessor-show();newImgProcessor-loadFile(fileName);,6.3标准文件对话框(QFileDialog),loadFile()函数的实现如下,完成具体读取文件内容的工作,是利用QFile和QTextStream:voidImgProcessor:loadFile(QStringfilename)printf(filename:%sn,filename.data();QFilefile(filename);if(file.open(QIODevice:ReadOnly|QIODevice:Text)QTextStreamtextStream(,6.3标准文件对话框(QFileDialog),在此只详细说明标准文件对话框QFileDialog的getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。QStringQFileDialog:getOpenFileName(QWidget*parent=0,constQString,6.4标准打印对话框(QPrintDialog),6.4.1文本打印打印文本在文本编辑工作中经常使用,下面将介绍如何实现文本打印功能。实现后的效果如图6.6所示。,6.4.1文本打印,具体实现步骤如下:(1)在头文件中添加“protectedslots:”变量:voidShowPrintText();(2)在createActions()函数的最后添加事件关联:connect(PrintTextAction,SIGNAL(triggered(),this,SLOT(ShowPrintText();(3)实现打开文件功能的函数ShowPrintText()具体内容如下:voidImgProcessor:ShowPrintText()QPrinterprinter;QPrintDialogprintDialog(,6.4.1文本打印,(4)在该源文件的开始部分添加如下头文件:#include#include(5)运行程序,单击“文件”“PrintText”命令或单击工具栏上的打印文本按钮,弹出标准打印对话框,如图6.6所示。,6.4.2图像打印,打印图像实际上是在一个QPaintDevice中画图,与平常在QWidget、QPixmap和QImage中画图一样,都是创建一个QPainter对象进行画图,只是打印使用的是QPrinter,QPrinter本质上也是一个绘图设备QPaintDevice。下面将介绍如何实现图像打印功能。(1)在头文件中添加“protectedslots:”变量:voidShowPrintImage();(2)在createActions()函数的最后添加事件关联:connect(PrintImageAction,SIGNAL(triggered(),this,SLOT(ShowPrintImage();,6.4.2图像打印,(3)实现打开文件功能的函数ShowPrintImage()具体内容如下:voidImgProcessor:ShowPrintImage()QPrinterprinter;QPrintDialogprintDialog(4)运行程序,单击“文件”“PrintImage”命令或单击工具栏上的打印文本按钮,弹出标准打印对话框,如图6.6所示。,6.5QMatrix实现图像坐标变换,6.5.1缩放功能下面将介绍如何实现缩放功能。实现步骤如下:(1)在头文件中添加“protectedslots:”变量:voidShowZoomIn();(2)在createActions()函数的最后添加事件关联:connect(zoomInAction,SIGNAL(triggered(),this,SLOT(ShowZoomIn();(3)实现图形的放大功能的函数ShowZoomIn()具体内容:voidImgProcessor:ShowZoomIn()if(img.isNull()return;QMatrixmartix;martix.scale(2,2);img=img.transformed(martix);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);,6.5.1缩放功能,(4)在头文件中添加“protectedslots:”变量:voidShowZoomOut();(5)在createActions()函数的最后添加事件关联:connect(zoomOutAction,SIGNAL(triggered(),this,SLOT(ShowZoomOut();(6)实现缩小功能的函数ShowZoomOut()具体内容如下:voidImgProcessor:ShowZoomOut()if(img.isNull()return;QMatrixmatrix;matrix.scale(0.5,0.5);img=img.transformed(matrix);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);,6.5.2旋转功能,(1)在头文件中添加“protectedslots:”变量:voidShowRotate90();(2)在createActions()函数的最后添加事件关联:connect(rotate90Action,SIGNAL(triggered(),this,SLOT(ShowRotate90();ShowRotate90()函数具体实现代码如下:voidImgProcessor:ShowRotate90()if(img.isNull()return;QMatrixmatrix;matrix.rotate(90);img=img.transformed(matrix);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);,6.5.2旋转功能,(3)在头文件中添加“protectedslots:”变量:voidShowRotate180();voidShowRotate270();(4)在createActions()函数的最后添加事件关联:connect(rotate180Action,SIGNAL(triggered(),this,SLOT(ShowRotate180();connect(rotate270Action,SIGNAL(triggered(),this,SLOT(ShowRotate270();,6.5.2旋转功能,(5)ShowRotate180()、ShowRotate270()函数具体实现代码如下:voidImgProcessor:ShowRotate180()if(img.isNull()return;QMatrixmatrix;matrix.rotate(180);img=img.transformed(matrix);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);voidImgProcessor:ShowRotate270()if(img.isNull()return;QMatrixmatrix;matrix.rotate(270);img=img.transformed(matrix);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);,6.5.3镜像功能,(1)在头文件中添加“protectedslots:”变量:voidShowMirrorVertical();voidShowMirrorHorizontal();(2)在createActions()函数的最后添加事件关联:connect(mirrorVerticalAction,SIGNAL(triggered(),this,SLOT(ShowMirrorVertical();connect(mirrorHorizontalAction,SIGNAL(triggered(),this,SLOT(ShowMirrorHorizontal();,6.5.3镜像功能,(3)ShowMirrorVertical()、ShowMirrorHorizontal()函数具体实现代码如下:voidImgProcessor:ShowMirrorVertical()if(img.isNull()return;img=img.mirrored(false,true);showWidget-imageLabel-setPixmap(QPixmap:fromImage(img);voidImgProcessor:ShowMirrorHorizontal()if(img.isNull()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;QToolButton*boldBtn;QToolButton*italicBtn;QToolButton*underlineBtn;QToolButton*colorBtn;QToolBar*fontToolBar;/字体工具栏(2)在头文件添加“protectedslots:”变量:voidShowFontComboBox(QStringcomboStr);voidShowSizeSpinBox(QStringspinValue);voidShowBoldBtn();voidShowItalicBtn();voidShowUnderlineBtn();voidShowColorBtn();voidShowCurrentFormatChanged(constQTextCharFormat,6.6文本编辑,(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,6.6文本编辑,(5)相对应的工具栏createToolBars()函数中添加如下代码:/字体工具栏fontToolBar=addToolBar(Font);/controlfontToolBar-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);,6.6.1设置字体功能,完成设置选定文字字体的工作ShowFontComboBox()函数:voidImgProcessor:ShowFontComboBox(QStringcomboStr)/设置字体QTextCharFormatfmt;fmt.setFontFamily(comboStr);mergeFormat(fmt);/把新的格式应用到光标选区内的字符所有对于QTextDocument进行的修改都通过QTextCursor类来完成。voidImgProcessor:mergeFormat(QTextCharFormatformat)QTextCursorcursor=showWidget-text-textCursor();if(!cursor.hasSelection()cursor.select(QTextCursor:WordUnderCursor);cursor.mergeCharFormat(format);showWidget-text-mergeCurrentCharFormat(format);,6.6.2设置字号功能,设置选定文字的字号大小ShowSizeSpinBox()函数:voidImgProcessor:ShowSizeSpinBox(QStringspinValue)/设置字号QTextCharFormatfmt;fmt.setFontPointSize(spinValue.toFloat();showWidget-text-mergeCurrentCharFormat(fmt);,6.6.3设置文字加粗功能,设置选定文字为加粗显示ShowBoldBtn()函数:voidImgProcessor:ShowBoldBtn()/设置文字显示加粗QTextCharFormatfmt;fmt.setFontWeight(boldBtn-isChecked()?QFont:Bold:QFont:Normal);showWidget-text-mergeCurrentCharFormat(fmt);,6.6.4设置文字斜体功能,设置选定文字为斜体显示ShowItalicBtn()函数:voidImgProcessor:ShowItalicBtn()/设置文字显示斜体QTextCharFormatfmt;fmt.setFontItalic(italicBtn-isChecked();showWidget-text-mergeCurrentCharFormat(fmt);,6.6.5设置文字加下画线功能,在选定文字下方加下画线ShowUnderlineBtn()函数:voidImgProcessor:ShowUnderlineBtn()/设置文字加下画线QTextCharFormatfmt;fmt.setFontUnderline(underlineBtn-isChecked();showWidget-text-mergeCurrentCharFormat(fmt);,6.6.6设置文字颜色功能及标准颜色对话框(QColorDialog),设置选定文字的颜色ShowColorBtn()函数:voidImgProcessor:ShowColorBtn()/设置文字颜色QColorcolor=QColorDialog:getColor(Qt:red,this);if(color.isValid()QTextCharFormatfmt;fmt.setForeground(color);showWidget-text-mergeCurrentCharFormat(fmt);,6.6.7设置字符格式功能,当光标所在处的字符格式发生变化时调用此槽函数,函数根据新的字符格式把工具栏上各个格式控件的显示更新。voidImgProcessor:ShowCurrentFormatChanged(constQTextCharFormat,6.7实现段落对齐及文本排序功能,6.7.1实现段落对齐功能完成对按下某个对齐按钮的响应ShowAlignment()函数,根据比较判断触发的是哪个对齐按钮,调用QTextEdit的setAlignment函

温馨提示

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

最新文档

评论

0/150

提交评论