收藏 分享(赏)

Qt用户界面设计.ppt

上传人:dreamzhangning 文档编号:5753166 上传时间:2019-03-15 格式:PPT 页数:576 大小:13.68MB
下载 相关 举报
Qt用户界面设计.ppt_第1页
第1页 / 共576页
Qt用户界面设计.ppt_第2页
第2页 / 共576页
Qt用户界面设计.ppt_第3页
第3页 / 共576页
Qt用户界面设计.ppt_第4页
第4页 / 共576页
Qt用户界面设计.ppt_第5页
第5页 / 共576页
点击查看更多>>
资源描述

1、Qt简介 Qt的作用 Qt的特性及优势 包含Qt的系统的架构 如何学习Qt,Qt简介 图形用户界面 (Graphical User Interface)是指采用图形方式显示的计算机操作用户界面 对比:早期的操作系统,如DOS,CUI(Command line User Interface)命令行模式的人机接口 组成部分:桌面、视窗、菜单、按钮、图标等 Qt是跨平台的C+应用程序和UI开发的框架 Qt4有超过500个类和9000多个函数,使用Qt可以迅速开发出期望的应用程序,Qt在整个产品开发中的作用 构建桌面环境; 为应用程序提供可视化的、友好的界面; 利用Qt类库自带的功能构建复杂应用程序;

2、 使用Qt构建的产品: http:/ 易于获取,个人应用完全免费 全面的、艺术级的应用程序框架 良好的跨平台性,一劳永逸多语言的支持,包含Qt的系统的架构,包含Qt的系统的架构,学习Qt可用的资源 NO1: Qt参考文档,包括类的简介、类相关函数的介绍、自带例程的源码及讲解、函数的查找和使用、核心特性、关键技术等 NO2:www.qtcn.org Qt中文论坛 NO3: C+GUI Programming with Qt4,Second Edition -官方参考文档,讲解精到,Qt学习方法 NO1:学习Qt自带教程,Qt的example及其参考代码。参考qtdemo程序,学习demo完成自己

3、的程序。 NO2: 阅读书籍,随书进行编程练习。如C+GUI Qt4编程,提供有完善的代码,Qt程序开发 QtCreator介绍 Hello Qt!程序开发流程 几个Qt练习,Qt Creator的设计目标是使开发人员能够利用Qt 这个应用程序框架更加快速及轻易的完成开发任务。Nokia 收购Qt之后在Qt的工具上做了很大的工作,推出的一款新的轻量级集成开发环境(IDE), 即QtCreator。QtCreator IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS、Windows等。,功能介绍: 项目生成向导 高级 C+ 代码编辑器 文件及类管理工具 集

4、成了Qt Designer 集成了qmake 构建工具 集成了图形化的 GDB 调试前端,利用QtCreator开发Qt应用程序的基本流程: 创建工程 项工程中添加文件 设计界面 编写代码实现功能 调试运行,创建工程 打开QtCreator,“File-New File or Project”,选择“Qt4 Gui Application”,输入工程名称:如ex01_helloQt 选择工程路径:如D:project,根据应用选择功能模块,此工程保持默认即可。,创建Qt4 Gui Application时,向导会自动生成一个新类,将来可在该类中完成应用程序的功能。 此步设置该类名称,选择基类名

5、称,及设置该类代码的文件名称 另外,设置是否要生成UI文件,如果生成则,将来可以在UI文件中来绘制界面。,最后一步“Finish”即可完成工程创建,在工程管理窗口中双击Forms下的mywidget.ui(UI文件),即可打开Qt Designer(Qt界面设计器) 在Designer中设计界面,编译运行程序:在工程名上右键,选择Run,运行效果:,练习1:隐藏“HelloQt!”设计两个按钮和一个Label,当点击“show”按钮时显示“HelloQt!”,点击“Hide”按钮时隐藏“HelloQt!”。,按照Hellot方法创建工程,并绘制界面。,添加功能:t使用信号和槽机制可以很容易的实

6、现对象之间的通信,当某些事件发生时,对应的信号会被发送。可以将一个对象的信号和其他对象的槽相连,这样,当信号发送是,和他相连的槽函数即可被调用。,编辑信号和槽: Edit-Edit signal/slots (F4) 编辑对象: Edit-Edit idgets (F3) F4之后,左键拖动“Show”到“HelloQT”上,释放鼠标,会弹出信号和槽对话框,选择连接clicked()信号和show()槽,同样的方法连接“Hide”的clicked()信号和“HelloQt”的show()槽连接好后如下图示如果要编辑部件,按F3回到部件编辑状态即可最后编译运行程序,观察现象,练习:控制LCDNu

7、mber显示通过slider(滑块)和dial(旋钮)控制 LCDNumber上显示的数字,Qt Creator编译的程序,在其工程文件夹下会有一个debug文件夹,其中有程序的.exe可执行文件。但Qt Creator默认是用动态链接的,就是可执行程序在运行时需要相应的.dll文件。我们点击生成的.exe文件,首先可能显示“没有找到mingwm10.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”表示缺少mingwm10.dll文件。,解决这个问题我们可以将相应的.dll文件放到系统中。在Qt Creator的安装目录的qt文件下的bin文件夹下(比如安装在了D盘,所以

8、路径是D:Qt2009.04qtbin),可以找到所有的相关.dll文件。方法一:在这里找到mingwm10.dll文件,将其复制到C:WINDOWSsystem文件夹下即可。下面再提示缺少什么dll文件,都像这样解决就可以了。 方法二:将这些dll文件都与.exe文件放到同一个文件夹下。不过这样每个.exe文件都要放一次。方法三:将D:Qt2009.04qtbin加入系统Path环境变量。右击我的电脑-属性-高级-环境变量-在系统变量列表中找到Path,将路径加入其中即可。,用纯源码编写: 1.新建空的Qt工程。,2.工程名为hello world,并选择工程保存路径,3.在新建好的工程中添

9、加文件。右击工程文件夹,弹出的菜单中选择Add New。,4.选择普通文件。点击Ok,5.文件名为main.cpp,点击Next进入下一步。,6.这里自动将这个文件添加到了新建的工程中。保持默认设置,点击完成。,7.在main.cpp文件中添加代码。,8.这时点击运行,程序执行了,但看不到效果,因为程序里什么也没做。我们点击信息框右上角的红色方块,停止程序运行。,9.我们再更改代码。添加一个对话框对象。,10.运行效果如下。,11.我们更改代码如下,在对话框上添加一个标签对象,并显示hello world。,12.运行效果如下。,二、Qt Creator编写多窗口程序 实现功能:程序开始出现一

10、个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。实现原理:程序里我们先建立一个主工程,作为主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。,实现过程: 1.首先新建Qt4 Gui Application工程,工程名为nGui,Base class选为QWidget。建立好后工程文件列表如下图。,2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。,3.选择Dialog witho

11、ut Buttons。,4.类名设为myDlg。,5.点击Finish完成。注意这里已经默认将其加入到了我们刚建的工程中了。,6.如下图,在mydlg.ui中拖入一个Push Button,将其上的文本改为“进入主窗口”,在其属性窗口中将其objectName改为enterBtn(Push Button名字),在下面的Signals and slots editor中进行信号和槽的关联,其中,Sender设为enterBtn,Signal设为clicked(),Receive设为myDlg,Slot设为accept()。这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能。

12、下面我们将利用这个信号。,7.修改主函数main.cpp,如下: #include #include “widget.h” #include “mydlg.h” /加入头文件 int main(int argc, char *argv) QApplication a(argc, argv); Widget w; myDlg my1; /建立自己新建的类的对象my1 if(my1.exec()=QDialog:Accepted) /利用Accepted信号判断enterBtn是否被按下 w.show(); /如果被按下,显示主窗口 return a.exec(); /程序一直执行,直到主窗口关闭

13、 else return 0; /如果没被按下,则不会进入主窗口,整个程序结束运行 主函数必须这么写,才能完成所要的功能。,到这里,我们就实现了一个界面结束执行,然后弹出另一个界面的程序。下面我们在主窗口上加一个按钮,按下该按钮,弹出一个对话框,但这个对话框关闭,不会使主窗口关闭。 8.如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择go to slot。,9.我们选择单击事件clicked()。,10.我们在弹出的槽函数中添加一句:my2.show();my2为我们新建对话框类的另一个对象,但是my2我们还没有定义,所以在widget.h文件中添

14、加相应代码,如下,先加入头文件,再加入my2的定义语句,这里我们将其放到private里,因为一般的函数都放在public里,而变量都放在private里。,#ifndef WIDGET_H #define WIDGET_H #include #include “mydlg.h” /包含头文件 namespace Ui class Widget; class Widget : public QWidget Q_OBJECT public: Widget(QWidget *parent = 0); Widget(); private: Ui:Widget *ui; myDlg my2; /对my

15、2进行定义 private slots: void on_pushButton_clicked(); ; #endif / WIDGET_H,到这里,再运行程序,便能完成我们实验要求的功能了。整个程序里,我们用两种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是一样的。,三、Qt Creator登录对话框 实现功能: 在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出警告对话框。实现原理: 通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用if

16、语句进行判断。,实现过程: 1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为Base class,这样便建立了主窗口。文件列表如下:,2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中。文件列表如下:,3.在logindlg.ui中设计下面的界面:行输入框为Line Edit。其中用户名后面的输入框在属性中设置其object Name为usrLineEdit,密码后面的输入框为pwdLineEdit,登录按钮为loginBtn,退

17、出按钮为exitBtn。,4.将exitBtn的单击后效果设为退出程序,关联如下:,5.右击登录按钮选择go to slot,再选择clicked(),然后进入其单击事件的槽函数,写入一句void loginDlg:on_loginBtn_clicked() accept(); ,6.改写main.cpp: #include #include “widget.h” #include “logindlg.h” int main(int argc, char *argv) QApplication a(argc, argv); Widget w; loginDlg login; if(login.

18、exec()=QDialog:Accepted) w.show(); return a.exec(); else return 0; ,7.这时执行程序,可实现按下登录按钮进入主窗口,按下退出按钮退出程序。 8.添加用户名密码判断功能。将登陆按钮的槽函数改为: void loginDlg:on_loginBtn_clicked() if (ui-usrLineEdit-text()=tr(“qt”) /如果不正确,弹出警告对话框 并在logindlg.cpp中加入#include 的头文件。如果不加这个头文件,QMessageBox类不可用。,9.这时再执行程序,输入用户名为qt,密码为123

19、456,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。,如果输入错误,便会弹出警告提示框:,10.在logindlg.cpp的loginDlg类构造函数里,添上初始化语句,使密码显示为小黑点。 loginDlg:loginDlg(QWidget *parent) : QDialog(parent), ui(new Ui:loginDlg) ui-setupUi(this); ui- pwdLineEdit- setEchoMode(QLineEdit:Password); ,效果如下:,11.如果输入如下图中的用户名,在用户名前不小心加上了一些空格,结果程序按错误的用户名对待了

20、。,我们可以更改if判断语句,使这样的输入也算正确。 void loginDlg:on_loginBtn_clicked() if(ui-usrLineEdit-text().trimmed()=tr(“qt”) 加入的这个函数的作用就是移除字符串开头和结尾的空白字符。,12.最后,如果输入错误了,重新回到登录对话框时,我们希望可以使用户名和密码框清空并且光标自动跳转到用户名输入框,最终的登录按钮的单击事件的槽函数如下: void loginDlg:on_loginBtn_clicked() if(ui-usrLineEdit-text().trimmed()=tr(“qt”)/将光标转到用户

21、名输入框 ,最终的loginDlg.cpp文件如下图:,四、Qt Creator添加菜单图标 1.新建Qt4 Gui Application工程,将工程命名为MainWindow,其他选项默认即可。 生成的窗口界面如下图。其中最上面的为菜单栏。,2.我们在Type Here那里双击,并输入“文件(&F)”,这样便可将其文件菜单的快捷键设为Alt+F。(注意括号最好用英文半角输入,这样看着美观),3.输入完按下Enter键确认即可,然后在子菜单中加入“新建(&N)”,确定后,效果如下图。,4.我们在下面的动作编辑窗口可以看到新加的“新建”菜单。,5.双击这一条,可打开它的编辑对话框。我们看到Ic

22、on项,这里可以更改“新建”菜单的图标。,6.我们点击后面的号,进入资源选择器,但现在这里面是空的。所以下面我们需要给该工程添加外部资源。,7.添加资源有两种方法。一种是直接添加系统提供的资源文件,然后选择所需图标。另一种是自己写资源文件。我们主要介绍第一种。新建Qt Resources file,将它命名为menu。其他默认。,8.添加完后如下图。可以看到添加的文件为menu.qrc。,9.我们最好先在工程文件夹里新建一个文件夹,如images,然后将需要的图标文件放到其中。,10.在Qt Creator的menu.qrc文件中,我们点击Add下拉框,选择Add Prefix。我们可以将生成

23、的/new/prefix前缀改为其他名字,如/File。,11.然后再选择Add下拉框,选择Add Files。再弹出的对话框中,我们到新建的images文件夹下,将里面的图标文件全部添加过来。,12.添加完成后,我们在Qt Creator的File菜单里选择Save All选项,保存所做的更改。(注意:一定要先保存刚才的qrc文件,不然在资源管理器中可能看不见自己添加的资源!),13.这时再打开资源选择器,可以看到我们的图标都在这里了。(注意:如果不显示,可以按一下上面的Reload按钮),14.我们将new.png作为“新建”菜单的图标,然后点击Shortcut,并按下Crtl+N,便能将

24、Crtl+N作为“新建”菜单的快捷键。,15.这时打开文件菜单,可以看到“新建”菜单已经有图标了。,运行程序后效果如下。,16.我们在工程文件夹下查看建立的menu.qrc文件,可以用写字板将它打开。,其具体内容如下。,第二种添加资源文件的方法。 1.首先右击工程文件夹,在弹出的菜单中选择Add New,添加新文件。也可以用File中的添加新文件。,2.我们选择文本文件。,3.将文件名设置为menu.qrc。,4.添加好文件后将其内容修改如下。可以看到就是用第一种方法生成的menu.qrc文件的内容。 5.保存文件后,在资源管理器中可以看到添加的图标文件。,五、Qt Creator布局管理器的

25、使用 首先对菜单进行完善。 1.我们在上一次的基础上再加入一些常用菜单。“文件”的子菜单如下图。中间的分割线可以点击Add Separator添加。,“编辑”子菜单的内容如下。,“帮助”子菜单的内容如下。,2.我们在动作编辑器中对各个菜单的属性进行设置。,3.我们拖动“新建”菜单的图标,将其放到工具栏里。拖动“新建”菜单的图标。,将其放到菜单栏下面的工具栏里。,4.我们再添加其他几个图标。使用Append Separator可以添加分割线。 5. 如果需要删除图标,可以在图标上点击右键选择Remove action即可。,布局管理器。(这里主要以垂直布局管理器进行讲解,其他类型管理器用法与之相

26、同,其效果可自己验证。) 1.在左边的器件栏里拖入三个PushButton和一个Vertical Layout(垂直布局管理器)到中心面板。如下图。,2.将这三个按钮放入垂直布局管理器,效果如下。可以看到按钮垂直方向排列,并且宽度可以改变,但高度没有改变。,3.我们将布局管理器整体选中,按下上面工具栏的Break Layout按钮,便可取消布局管理器。(我们当然也可以先将按钮移出,再按下Delete键将布局管理器删除。),4.下面我们改用分裂器部件(QSplitter)。 先将三个按钮同时选中,再按下上面工具栏的Lay Out Vertically in Splitter(垂直分裂器)。,效果

27、如下图。可以看到按钮的大小可以随之改动。这也就是分裂器和布局管理器的分别。,5.其实布局管理器不但能控制器件的布局,还有个很重要的用途是,它能使器件的大小随着窗口大小的改变而改变。 我们先在主窗口的中心拖入一个文本编辑器Text Edit。,这时直接运行程序,效果如下。可以看到它的大小和位置不会随着窗口改变。,下面我们选中主窗口部件,然后在空白处点击鼠标右键,选择Layout-Lay Out in a Grid,使整个主窗口的中心区处于网格布局管理器中。,可以看到,这时文本编辑器已经占据了整个主窗口的中心区。,运行一下程序,可以看到无论怎样拉伸窗口,文本编辑框的大小都会随之改变。,六、Qt C

28、reator实现文本编辑 在开始正式写程序之前,我们先要考虑一下整个流程。因为我们要写记事本一样的软件,所以最好先打开windows中的记事本,进行一些简单的操作,然后考虑怎样去实现这些功能。再者,再强大的软件,它的功能也是一个一个加上去的,不要设想一下子写出所有的功能。我们这里先实现新建文件,保存文件,和文件另存为三个功能,是因为它们联系很紧,而且这三个功能总的代码量也不是很大。因为三个功能之间的关系并不复杂,所以我们这里便不再画流程图,而只是简单描述一下。 新建文件,那么如果有正在编辑的文件,是否需要保存呢? 如果需要进行保存,那这个文件以前保存过吗?如果没有保存过,就应该先将其另存为。,

29、下面开始按这些关系写程序。 1.打开Qt Creator,在File菜单中选择Open,然后在工程文件夹中打开MainWindow.pro工程文件。 先在main.cpp文件中加入以下语句,让程序中可以使用中文。 在其中加入#include 头文件包含,再在主函数中加入下面一行: QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); 这样在程序中使用中文,便能在运行时显示出来了。更改后文件如下图。,2.在mainwindow.h文件中的private下加入以下语句。 bool isSaved; /为true时标志文件已经保存,为false时

30、标志文件尚未保存 QString curFile; /保存当前文件的文件名 void do_file_New(); /新建文件 void do_file_SaveOrNot(); /修改过的文件是否保存 void do_file_Save(); /保存文件 void do_file_SaveAs(); /文件另存为 bool saveFile(const QString /存储文件 这些是变量和函数的声明。其中isSaved变量起到标志的作用,用它来标志文件是否被保存过。然后我们再在相应的源文件里进行这些函数的定义。,3.在mainwindow.cpp中先加入头文件#include ,然后在构

31、造函数里添加以下几行代码。 isSaved = false; /初始化文件为未保存过状态 curFile = tr(“未命名.txt”); /初始化文件名为“未命名.txt” setWindowTitle(curFile); /初始化主窗口的标题 这是对主窗口进行初始化。效果如下。,4.然后添加“新建”操作的函数定义。 void MainWindow:do_file_New() /实现新建文件的功能 do_file_SaveOrNot(); isSaved = false; curFile = tr(“未命名.txt”); setWindowTitle(curFile); ui-textEdi

32、t-clear(); /清空文本编辑器 ui-textEdit-setVisible(true); /文本编辑器可见 新建文件,先要判断正在编辑的文件是否需要保存。然后将新建的文件标志为未保存过状态。,5.再添加do_file_SaveOrNot函数的定义。 void MainWindow:do_file_SaveOrNot() /弹出是否保存文件对话框 if(ui-textEdit-document()-isModified() /如果文件被更改过,弹出保存对话框 QMessageBox box; box.setWindowTitle(tr(“警告”); box.setIcon(QMessa

33、geBox:Warning); box.setText(curFile + tr(”尚未保存,是否保存?”); box.setStandardButtons(QMessageBox:Yes | QMessageBox:No); if(box.exec() = QMessageBox:Yes) /如果选择保存文件,则执行保存操作 do_file_Save(); ,这个函数实现弹出一个对话框,询问是否保存正在编辑的文件。,6.再添加“保存”操作的函数定义。 void MainWindow:do_file_Save() /保存文件 if(isSaved) /如果文件已经被保存过,直接保存文件 sav

34、eFile(curFile); else do_file_SaveAs(); /如果文件是第一次保存,那么调用另存为 对文件进行保存时,先判断其是否已经被保存过,如果没有被保存过,就要先对其进行另存为操作。,7.下面是“另存为”操作的函数定义。 void MainWindow:do_file_SaveAs() /文件另存为 QString fileName = QFileDialog:getSaveFileName(this,tr(“另存为”),curFile); /获得文件名 if(!fileName.isEmpty() /如果文件名不为空,则保存文件内容 saveFile(fileName

35、); ,这里弹出一个文件对话框,显示文件另存为的路径。,8.下面是实际文件存储操作的函数定义。 bool MainWindow:saveFile(const QString ,这个函数实现将文本文件进行存储。下面我们对其中的一些代码进行讲解。 QFile file(fileName);一句,定义了一个QFile类的对象file,其中filename表明这个文件就是我们保存的的文件。然后我们就可以用file代替这个文件,来进行一些操作。Qt中文件的操作和C,C+很相似。对于QFile类对象怎么使用,我们可以查看帮助。点击Qt Creator最左侧的Help,在其中输入QFile,在搜索到的列表中

36、选择QFile即可。这时在右侧会显示出QFile类中所有相关信息以及他们的用法和说明。,我们往下拉,会发现下面有关于怎么读取文件的示例代码。,再往下便能看到用QTextStream类对象,进行字符串输入的例子。下面也提到了QFileInfo和QDir等相关的类,我们可以点击它们去看一下具体的使用说明。,上面只是做了一个简单的说明。以后我们对自己不明白的类都可以去帮助里进行查找,这也许是我们以后要做的最多的一件事了。对于其中的英文解释,我们最好想办法弄明白它的大意,其实网上也有一些中文的翻译,但最好还是从一开始就尝试着看英文原版的帮助,这样以后才不会对中文翻译产生依赖。,9.双击mainwind

37、ow.ui文件,在图形界面窗口下面的Action Editor动作编辑器里,我们右击“新建”菜单一条,选择Go to slot,然后选择triggered(),进入其触发事件槽函数。,同理,进入其他两个菜单的槽函数,将相应的操作的函数写入槽函数中。如下。 void MainWindow:on_action_New_triggered() /信号和槽的关联 do_file_New(); void MainWindow:on_action_Save_triggered() do_file_Save(); void MainWindow:on_action_SaveAs_triggered() do

38、_file_SaveAs(); ,最终的mainwindow.cpp文件如下。,最终的mainwindow.h文件如下。,这时点击运行,就能够实现新建文件,保存文件,文件另存为 的功能了。,实现打开,关闭,退出,撤销,复制,剪切,粘贴的功能。 先备份上次的工程文件,然后再将其打开。 1.先在mainwindow.h文件中加入函数的声明。 void do_file_Open(); /打开文件 bool do_file_Load(const QString /读取文件,2.再在mainwindow.cpp文件中写函数的功能实现。 void MainWindow:do_file_Open()/打开文

39、件 do_file_SaveOrNot();/是否需要保存现有文件 QString fileName = QFileDialog:getOpenFileName(this); /获得要打开的文件的名字 if(!fileName.isEmpty()/如果文件名不为空 do_file_Load(fileName); ui-textEdit-setVisible(true);/文本编辑器可见 ,bool MainWindow:do_file_Load(const QString ,上面的打开文件函数与文件另存为函数相似,读取文件的函数与 文件存储函数相似。,3.然后按顺序加入更菜单的关联函数,如下。

40、 void MainWindow:on_action_Open_triggered() /打开操作 do_file_Open(); / void MainWindow:on_action_Close_triggered() /关闭操作 do_file_SaveOrNot(); ui-textEdit-setVisible(false); / void MainWindow:on_action_Quit_triggered() /退出操作 on_action_Close_triggered(); /先执行关闭操作 qApp-quit(); /再退出系统,qApp是指向应用程序的全局指针 /,vo

41、id MainWindow:on_action_Undo_triggered() /撤销操作 ui-textEdit-undo(); / void MainWindow:on_action_Cut_triggered() /剪切操作 ui-textEdit-cut(); / void MainWindow:on_action_Copy_triggered() /复制操作 ui-textEdit-copy(); / void MainWindow:on_action_Past_triggered() /粘贴操作 ui-textEdit-paste(); ,因为复制,撤销,全选,粘贴,剪切等功能,

42、是TextEdit默认 就有的,所以我们只需调用一下相应函数就行。到这里,除了 查找和帮助两个菜单的功能没有加上以外,其他功能都已经实 现了。,七、Qt Creator实现文本查找 以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框。对于怎么实现查找功能的,我们详细地分步说明了怎么进行类中方法的查找和使用。其中也将Qt Creator智能化的代码补全功能和程序中函数的声明位置和定义位置间的快速切换进行了介绍。 1.首先还是保存以前的工程,然后再将其打开。 我们发现Qt Creator默认的字体有点小,可以按下Ctrl键的同时按两下+键,来放大字体。也可以选择Edit-Advanc

43、ed-Increase Font Size。,2.在mainwindow.h中加入#include 的头文件包含,在private中添加 QLineEdit *find_textLineEdit; /声明一个行编辑器,用于输入要查找的内容 在private slots中添加 void show_findText(); 在该函数中实现查找字符串的功能。,3.我们进入查找菜单的触发事件槽函数,更改如下。 void MainWindow:on_action_Find_triggered() QDialog *findDlg = new QDialog(this); /新建一个对话框,用于查找操作,t

44、his表明它的父窗口是MainWindow。 findDlg-setWindowTitle(tr(“查找”); /设置对话框的标题 find_textLineEdit = new QLineEdit(findDlg); /将行编辑器加入到新建的查找对话框中 QPushButton *find_Btn = new QPushButton(tr(“查找下一个”),findDlg); /加入一个“查找下一个”的按钮 QVBoxLayout* layout = new QVBoxLayout(findDlg); layout-addWidget(find_textLineEdit); layout-a

45、ddWidget(find_Btn); /新建一个垂直布局管理器,并将行编辑器和按钮加入其中 findDlg -show(); /显示对话框 connect(find_Btn,SIGNAL(clicked(),this,SLOT(show_findText(); /设置“查找下一个”按钮的单击事件和其槽函数的关联 ,4.这里我们直接用代码生成了一个对话框,其中一个行编辑器可以输入要查找的字符,一个按钮可以进行查找操作。我们将这两个部件放到了一个垂直布局管理器中。然后显示这个对话框。并设置了那个按钮单击事件与show_findText()函数的关联。,5.下面我们开始写实现查找功能的show_f

46、indText()函数。 void MainWindow:show_findText()/“查找下一个”按钮的槽函数 QString findText = find_textLineEdit-text(); /获取行编辑器中的内容 先用一个QString类的对象获得要查找的字符。然后我们一步一步写查找操作的语句。,6.在下一行写下ui,然后直接按下键盘上的“”或“.”,因为ui是指针对象,所以自动生成“-”号,而且弹出了ui中的所有部件名称的列表。如下图。,7.我们用向下的方向键选中列表中的textEdit。或者我们可以先输入text,这时能缩减列表的内容。,8.如上图我们将鼠标放到textE

47、dit上,这时便出现了textEdit的类名信息,且后面出现一个F1按键。我们按下键盘上的F1,便能出现textEdit的帮助。,9.我们在帮助中向下拉,会发现这里有一个find函数。,10.我们点击find,查看其详细说明。,11.可以看到find函数可以实现文本编辑器中字符串的查找。其中有一个FindFlags的参数,我们点击它查看其说明。,12.可以看到它是一个枚举变量(enum),有三个选项,第一项是向后查找(即查找光标以前的内容,这里的前后是相对的说法,比如第一行已经用完了,光标在第二行时,把第一行叫做向后。),第二项是区分大小写查找,第三项是查找全部。13.我们选用第一项,然后写出

48、下面的语句。 ui-textEdit-find(findText,QTextDocument:FindBackward);,当写完函数名和第一个“(”后,系统会自动显示出该函数的函数原型,这样可以使我们减少出错。,14.这时已经能实现查找的功能了。但是我们刚才看到find的返回值类型是bool型,而且,我们也应该为查找不到字符串作出提示。 if(!ui-textEdit-find(findText,QTextDocument:FindBackward) QMessageBox:warning(this,tr(“查找”),tr(“找不到 %1) .arg(findText); 因为查找失败返回值是false,所以if条件加了“!”号。在找不到时弹出警告对话框。,15.到这里,查找功能就基本上写完了。show_findText()函数的内容如下。,我们会发现随着程序功能的增强,其中的函数也会越来越多,我们都会为查找某个函数的定义位置感到头疼。而在Qt Creator中有几种快速定位函数的方法,我们这里讲解三种。 第一,在函数声明的地方直接跳转到函数定义的地方。 如在do_file_Load上点击鼠标右键,在弹出的菜单中选择Follow Symbol under Cursor或者下面的Switch between Method Declaration/Definition。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报