1、现在加上查找菜单的功能。因为这里要涉及关于 Qt Creator 的很多实用功能,所以单独用一篇文章来介绍。以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框。对于怎么实现查找功能的,我们详细地分步说明了怎么进行类中方法的查找和使用。其中也将 Qt Creator 智能化的代码补全功能和程序中函数的声明位置和定义位置间的快速切换进行了介绍。1.首先还是保存以前的工程,然后再将其打开。我们发现 Qt Creator 默认的字体有点小,可以按下 Ctrl 键的同时按两下+键,来放大字体。也可以选择 Edit-Advanced-Increase Font Size。2.在 mainwi
2、ndow.h 中加入#include 的头文件包含,在 private 中添加QLineEdit *find_textLineEdit; /声明一个行编辑器,用于输入要查找的内容在 private slots 中添加void show_findText();在该函数中实现查找字符串的功能。3.我们进入查找菜单的触发事件槽函数,更改如下。void MainWindow:on_action_Find_triggered()QDialog *findDlg = new QDialog(this);/新建一个对话框,用于查找操作,this 表明它的父窗口是 MainWindow。findDlg-set
3、WindowTitle(tr(“查找”);/设置对话框的标题find_textLineEdit = new QLineEdit(findDlg);/将行编辑器加入到新建的查找对话框中QPushButton *find_Btn = new QPushButton(tr(“查找下一个”),findDlg);/加入一个“查找下一个”的按钮QVBoxLayout* layout = new QVBoxLayout(findDlg);layout-addWidget(find_textLineEdit);layout-addWidget(find_Btn);/新建一个垂直布局管理器,并将行编辑器和按钮加
4、入其中findDlg -show();/显示对话框connect(find_Btn,SIGNAL(clicked(),this,SLOT(show_findText();/设置“查找下一个”按钮的单击事件和其槽函数的关联这里我们直接用代码生成了一个对话框,其中一个行编辑器可以输入要查找的字符,一个按钮可以进行查找操作。我们将这两个部件放到了一个垂直布局管理器中。然后显示这个对话框。并设置了那个按钮单击事件与 show_findText()函数的关联。5.下面我们开始写实现查找功能的 show_findText()函数。void MainWindow:show_findText()/“查找下一个
5、”按钮的槽函数QString findText = find_textLineEdit-text();/获取行编辑器中的内容先用一个 QString 类的对象获得要查找的字符。然后我们一步一步写查找操作的语句。6.在下一行写下 ui,然后直接按下键盘上的“”或“.”,因为 ui 是指针对象,所以自动生成“-”号,而且弹出了 ui 中的所有部件名称的列表。如下图。7.我们用向下的方向键选中列表中的 textEdit。或者我们可以先输入 text,这时能缩减列表的内容。8.如上图我们将鼠标放到 textEdit 上,这时便出现了 textEdit 的类名信息,且后面出现一个 F1 按键。我们按下键
6、盘上的 F1,便能出现 textEdit 的帮助。9.我们在帮助中向下拉,会发现这里有一个 find 函数。10.我们点击 find,查看其详细说明。11.可以看到 find 函数可以实现文本编辑器中字符串的查找。其中有一个FindFlags 的参数,我们点击它查看其说明。12.可以看到它是一个枚举变量(enum),有三个选项,第一项是向后查找(即查找光标以前的内容,这里的前后是相对的说法,比如第一行已经用完了,光标在第二行时,把第一行叫做向后。),第二项是区分大小写查找,第三项是查找全部。13.我们选用第一项,然后写出下面的语句。ui-textEdit-find(findText,QText
7、Document:FindBackward);/将行编辑器中的内容在文本编辑器中进行查找当我们刚打出“f”时,就能自动弹出 textEdit 类的相关属性和方法。可以看到,当写完函数名和第一个“(”后,系统会自动显示出该函数的函数原型,这样可以使我们减少出错。14.这时已经能实现查找的功能了。但是我们刚才看到 find 的返回值类型是bool 型,而且,我们也应该为查找不到字符串作出提示。if(!ui-textEdit-find(findText,QTextDocument:FindBackward)QMessageBox:warning(this,tr(“查找”),tr(“找不到 %1).a
8、rg(findText);因为查找失败返回值是 false,所以 if 条件加了“!”号。在找不到时弹出警告对话框。15.到这里,查找功能就基本上写完了。show_findText()函数的内容如下。我们会发现随着程序功能的增强,其中的函数也会越来越多,我们都会为查找某个函数的定义位置感到头疼。而在 Qt Creator 中有几种快速定位函数的方法,我们这里讲解三种。第一,在函数声明的地方直接跳转到函数定义的地方。如在 do_file_Load 上点击鼠标右键,在弹出的菜单中选择 Follow Symbol under Cursor 或者下面的 Switch between Method De
9、claration/Definition。这时系统就会自动跳转到函数定义的位置。如下图。第二,快速查找一个文件里的所有函数。我们可以点击窗口最上面的下拉框,这里会显示本文件中所有函数的列表。第三,利用查找功能。1.我们先将鼠标定位到一个函数名上。2.然后选择 Edit-Find/Replace-Find Dialog。3.这时会出现一个查找对话框,可以看到要查找的函数名已经写在里面了。4.当我们按下 Search 按钮后,会在查找结果窗口显示查找到的结果。5.我们点击第二个文件。会发现在这个文件中有两处关键字是高亮显示。6.我们双击第二项,就会自动跳转到函数的定义处。文章讲到这里,我们已经很详
10、细地说明了怎样去使用一个类里面没有用过的方法函数;也说明了 Qt Creator 中的一些便捷操作。可以看到,Qt Creator 开发环境,有很多很人性化的设计,我们应该熟练应用它们。在以后的文章中,我们不会再很详细地去用帮助来说明一个函数是怎么来的,该怎么用,这些应该自己试着去查找。分类: Qt 系列教程 作者: yafeilinux 日期: 四月 30th, 2010. 459 viewsTags: creator, qt, yafeilinux, 教程 3 条评论 在 “七、Qt Creator 实现文本查找”1. Me. 说: 2010 年 05 月 21 日于 10:21 下午QTextDocument:FindBackward 是从光标位置往前找吧。用QTextDocument:FindCaseSensitively 应该更合适2. woody 说: 2010 年 05 月 12 日于 9:07 上午要是能够添加一些进程、线程、网络方面的,该多好阿!3. yangyang 说: 2010 年 05 月 3 日于 7:00 上午学习完毕 谢谢_