版权声明
导语
这一篇咱们来加上查找菜单的功能。由于要涉及Qt Creator的不少实用功能,因此单独用一篇文章来介绍。之前都用设计器设计界面,而此次咱们用代码实现一个简单的查找对话框。除了讲解怎么实现查找功能,这里还详细地说明了怎么进行类中方法的查找和使用。其中也讲解了Qt Creator程序中怎样在函数的声明位置和定义位置间进行快速切换。
环境是:
Windows 7 + Qt 4.8.1+ Qt Creator 2.4.1
目录
1、添加查找对话框
2、实现查找功能
正文
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>
2、实现查找功能
下面咱们来分步骤完成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开发环境,有不少很人性化的设计,咱们应该熟练应用它们。在之后的文章中,咱们不会再很详细地去用帮助来讲明一个函数是怎么来的,该怎么用,这些应该本身试着去查找。