Qt 查找功能

版权声明


该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处!

导语


这一篇我们来加上查找菜单的功能。因为要涉及Qt Creator的很多实用功能,所以单独用一篇文章来介绍。以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框。除了讲解怎么实现查找功能,这里还详细地说明了怎么进行类中方法的查找和使用。其中也讲解了Qt Creator程序中怎样在函数的声明位置和定义位置间进行快速切换。

环境是:Windows 7 + Qt 4.8.1+ Qt Creator 2.4.1

目录


一、添加查找对话框

二、实现查找功能

正文


一、添加查找对话框

1.我们继续在前一篇程序的基础之上进行更改。首先到mainwindow.h文件中添加类的前置声明(对于什么是前置声明,以及这样使用的好处,可以在网上百度):

class QLineEdit;

class QDialog;

前置声明所在的位置跟头文件包含的位置相同。

然后在private中添加对象定义:

QLineEdit *findLineEdit;

QDialog *findDlg;

下面再添加一个私有槽声明:

private slots:

void showFindText();

槽可以看做是一个函数,只不过可以和信号进行关联。

2.下面到mainwindow.cpp文件中,因为前面在头文件中使用了类的前置声明,所以这里需要先添加头文件包含:

#include <QLineEdit>

#include <QDialog>

#include <QPushButton>

然后在构造函数中进行初始化操作,即添加如下代码:

findDlg = new QDialog(this);

findDlg->setWindowTitle(tr("查找"));

findLineEdit = new QLineEdit(findDlg);

QPushButton *btn= new QPushButton(tr("查找下一个"), findDlg);

QVBoxLayout *layout= new QVBoxLayout(findDlg);

layout->addWidget(findLineEdit);

layout->addWidget(btn);

connect(btn, SIGNAL(clicked()), this, SLOT(showFindText()));

这里创建了一个对话框,然后将一个行编辑器和一个按钮放到了上面,并使用布局管理器进行布局。最后将按钮的单击信号关联到了自定义的显示查找到的文本槽上。下面来添加该槽的定义。

3.这里先说一个可以快速从头文件声明处创建函数定义的方法。到mainwindow.h文件中,将鼠标定位到showFindText()函数上,然后点击右键,在弹出的菜单中选择“重构”→“在mainwindow.cpp添加声明”,或者直接使用Alt+Enter快捷键,这样就会直接在mainwindow.cpp文件中添加函数定义,并跳转到该函数处。如下图所示。

<ignore_js_op>

二、实现查找功能

下面我们来分步骤完成showFindText()函数。在讲解过程中会涉及一些很实用的功能的介绍。

1.先在函数中添加一行代码来获取行编辑器中要查找的字符串。

void MainWindow::showFindText()

{

QString str = findLineEdit->text();

}

2.在下一行,我们先输入ui,然后按下键盘上的“>.”键,这时就会自动输入“.”或者“->”,并且列出ui上所有可用部件的对象名。如下图所示。

<ignore_js_op>

3.我们要输入textEdit,先输入t,这时会自动弹出textEdit,只需要按下回车键即可。如下图所示。

<ignore_js_op>

4.下面我们将光标放到textEdit上,这时就会出现QTextEdit类的简单介绍,如下图所示。

<ignore_js_op>

5.按照提示,我们按下键盘上的F1键,就会在编辑器的右侧打开QTextEdit类的帮助文档。如下图所示。这时还可以按下上面的“切换至帮助模式”来进入到帮助模式中打开该文档。

<ignore_js_op>

6.我们在该类的Public Functions公共函数列表中发现有一个find()函数。如下图所示。

<ignore_js_op>

7.从字面意思上可以知道该函数应该是用于查找功能的,我们点击该函数进入到它的详细介绍处。如下图所示。

<ignore_js_op>

8.根据介绍可以知道该函数用于查询指定的exp字符串,如果找到了就将光标跳转到查找到的位置,如果没有找到就返回false。这个函数还有一个QTextDocument::FindFlags参数,为了了解该参数的意思,我们点击该参数进入其详细介绍处。如下图所示。

<ignore_js_op>

可以看到该参数是一个枚举变量,用来指定查找的方式,分别是向后查找、区分大小写、全词匹配等。如果不指定该参数,默认的是向前查找、不区分大小写、包含该字符串的词也可以查找到。这几个变量还可以使用“|”符号来一起使用。

9.根据帮助,我们补充完该行代码:

ui->textEdit->find(str, QTextDocument::FindBackward);

10. 这时已经能实现查找的功能了。但是我们刚才看到find的返回值类型是bool型,而且,我们也应该为查找不到字符串作出提示。将这行代码更改为:

if (!ui->textEdit->find(str, QTextDocument::FindBackward))

{

QMessageBox::warning(this, tr("查找"),

tr("找不到%1").arg(str));

}

到这里查找函数就基本讲完了。

11. 我们会发现随着程序功能的增强,其中的函数也会越来越多,我们都会为查找某个函数的定义位置感到头疼。而在QtCreator中有几种快速定位函数的方法。

第一种,在函数声明的地方直接跳转到函数定义的地方。

例如我们在mainwindow.h文件的loadFile()函数上点击鼠标右键,在弹出的菜单上选择“在方法声明/定义之间切换”,这时就会自动跳转到mainwindow.cpp文件中该函数的定义处。如下图所示。当然还可以反向使用。

<ignore_js_op>

第二种,快速查看一个文件里的所有函数。

可以在编辑器正上方的下拉框里查看正在编辑的文件中所有的函数的列表,点击一个函数就会跳转到指定位置。如下图所示。

<ignore_js_op>

第三种,使用类视图或者大纲视图。

在项目列表上面的下拉框中可以更改查看的内容,如果选择为类视图或者大纲,则会显示文件中所有的函数的列表。如下图所示。

<ignore_js_op>

第四种,使用查找功能查看函数的所有调用处。

在一个函数名上点击鼠标右键,然后选择“查找何处被使用”菜单,这时就会在下面的搜索结果栏中显示该函数所有的使用位置。我们可以通过点击一个位置来跳转到该位置。如下图所示。

<ignore_js_op>

12.最后,我们来实现界面上的查找功能。从设计模式进入查找动作的触发信号的槽,更改如下:

void MainWindow::on_action_Find_triggered()

{

findDlg->show();

}

这时运行程序,效果如下图所示。

<ignore_js_op>

结语


讲到这里,我们已经很详细地说明了怎样去使用一个类里面未接触过的函数;也说明了Qt Creator中的一些便捷操作。可以看到,Qt Creator开发环境,有很多很人性化的设计,我们应该熟练应用它们。在以后的文章中,我们不会再很详细地去用帮助来说明一个函数是怎么来的,该怎么用,这些应该自己试着去查找。

时间: 2024-10-09 00:33:59

Qt 查找功能的相关文章

使用vs的查找功能,简单大概的统计vs中的代码行数

VS强大的查找功能,可以使用正则表达式来进行查找,这里统计代码行数的原理就是: 在所有指定文件中进行搜索,统计匹配的文本行数. 但是匹配的行需要满足:非注释.非空等特殊非代码行. 使用Ctrl+Shift+F快捷键打开高级查找,可以设置查找内容为正则表达式(需要在下面勾选,同时可以设置查找的文件类型),查找范围请根据需要进行设置. 点击"查找全部"搜索整个解决方案,可以得到查找结果: 最下面会列出匹配行数,这个就是我们所谓的代码行数的估值了...不过这个值也太不准确了... 但是起码有

jQuery单页无刷新关键词查找功能

jQuery广告代码单页无刷新关键词查找功能是一款直接在数据库内查找内容,并且滑动跳转到指定的内容上,用来增加用户体验是个不错的效果. 来源:http://www.huiyi8.com/jiaoben/ jQuery单页无刷新关键词查找功能

source insight的查找功能

source insight是一款很好的c语言的程序编辑器,方便对project管理,方便程序的阅读和编辑.查找功能使用十分频繁,选项较多,与其它软件的查找功能也类似,下面对英文版的查找功能,做简单说明: 查找参数: whole words only :                  全字匹配查找 case sensitive  :                   区分大小写 project wide  :                         项目内查找 include su

JS实现项目查找功能

又是好久没有更新文章了,技术差,人又懒是重罪啊!! 在工作中每天都要查找目前正在接手的项目,而如果项目一多起来怎么办呢? 最近主管突然说要找一下以前的项目改一点BUG,然后我就找了半天才找到对应的文件夹.这就严重影响了工作时间.故此,花了一点时间做了一下公司的项目查找功能,方便以后项目的查找,减少在这个上面的时间. 需求如下: 1.项目查找分为URL地址及文件夹路径 2.输入相应的项目名称(拼音),回车即可打开对应的项目URL或显示文件夹路径 3.显示以往项目列表,点击即可查看相应数据 效果实现

通过QT查找Word中的关键字,并做高亮或删除操作

最近由于项目需要,要用QT操作Word文档.具体的工作需求:在指定的Word文档(*.doc文件/*.docx文件)中查找关键字,找到后做高亮操作或者直接删除操作,然后另存为到别的目录(表示这个文件被操作过了). 这个功能很简单,确实挺简单,但由于是第一次用QT操作Word文档,所以仍需要经过一番查找资料.网上用QT操作Word文档的资料不是很多(可能是我没找对地方),所以经过了一段时间的碰壁之后(没有现成的,哪怕是半成品),我决定还是从源头看起: 1.查看帮助文档:Microsoft Word

浅谈QT打印功能实现

QT作为一款轻量级的集成开发环境,其设计的目标是使开发人员利用QT这个应用程序框架更加快速及轻易的开发应用程序.要达到此目的,要求QT必须能够跨平台,QT能够在32位及64位的Linux,MAC OS X以及Windows上运行. 现在我们想在项目中加入一项打印功能,即使在不同的操作系统环境下,仍然能有相同的用户体验,在实现中发现QT对打印的支持不是那么友好.我们希望在跨平台的情况下,能打印各种文档,比如用户的简历,发现如果不调用对应操作系统的内核外壳打印函数,这项工作变得异常艰难.我们希望用Q

VS2012 2013 显示查找功能 无法具体定位 解决方法

问题的现象:通过使用 Ctrl + Shift + F 也就是Find In Files功能,使用之后只能显示统计结果,不显示具体行.如下图 regedit 中在注册表中查找:HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32 发现了默认的值被设置成了NULL.(我是x64系统) 问题就在这里,只需要填入C:\Program Files (x86)\Common Fil

Qt圆角功能和状态组合按钮,可以显示颜色或者图片

使用两个按钮和一个Label封装了一个功能和状态圆角组合按钮,Label用来显示颜色或者图片. 实现的效果如下: 显示图片: 显示红色: 其中颜色或者图片是通过函数设置进去的. 两个按钮:前一个是状态按钮,可以Check,表示使用此项功能:后一个按钮是功能按钮,可以Check,表示跳转到此功能对应的选项.两个按钮都有信号,可以通过信号进行连接你需要的槽函数. 具体实现代码: #include <QPushButton> #include <QLabel> class QStateF

Xcode使用小技巧-filter查找功能和查看最近修改的文件

今天偶然发现了关于Xcode的一个小技巧: 1.查看最近修改的文件 2.使用filter查找制定文件 没错,就是下面这个东西,很容易忽略的一个小工具,在Xcode左下角位置. 一.查找指定文件 场景:有时候我们想查找一个文件,但忘了文件在哪里了,只记得几个关键词 解决: 1.使用全局搜索 但这种有个弊端,就是会把项目里,所以与关键词相关的内容都找出来. 2.使用文件filter功能 直接输入关键字,就可以把所有含关键字的文件找出来,很强大哦... 二.查看最近修改的文件 在filter右边有两个