天天看点

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)



创建一个基于应用的qtwidget应用程序

这个手册描述了怎样使用qtcreater创建个一个小的qt应用程序,text

finder.它是qt工具text finder例子的简写版本。这个应用程序的用户界面通过使用qt

designer来构造生成。逻辑上来说,这个应用程序是通过代码编辑器上编写c++代码实现的。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

创建text finder项目案例:

1选择file(文件)>

new fileor project(新建文件或项目) > application(应用程序)>

qtwidgets application > choose(选择)

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

接着打开了项目介绍和位置窗口

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

2在名称的文本框中,填写textfinder

3在创建路径的文本框中,键入项目文件存储路径,例如:e:\examples,接着点击”下一步”(在windows和linux平台)或者”继续”(在os

x平台上)。

构建套件对话框打开了:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

4为运行您的项目选择构建套件,接着点击”下一步”或者”继续”

注意:如果一个套件在”工具

> 选项 >编译和运行 >kits”,这个对话框将会跳过。

接着”类信息”对话框打开了:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

5在类名的文本框中,textfinder作为类名。

6在基类列表里,选择qwidget作为基类类型。

注意:头文件,源文件和界面文件将根据类名自动匹配。

7点击next和继续。

接着”项目管理”窗口被打开:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      8检查项目设置,并且点击”完成”(在windows和linux平台)或者”继续”(在os

x平台)

textfinder项目包含以下文件:

textfinder.h

截图:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

textfinder.cpp

main.cpp

textfinder.ui

textfinder.pro

添加缺少部分:

开始设计用户界面,添加缺少的代码,实现查找功能。

设计用户界面:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

1在qt creater中的edit编辑模式里,双击textfind.ui文件,转到qt设计界面。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

2拖拽下面的部件到界面中:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

label(qlabel)

line edit(qlineedit)

pushbutton(qpushbutton)

注意:如果想快速定位这些部件,可以使用在工具栏上部的搜索窗口。

例如,查找label部件,可以输入label进行查找:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      3双击label部件,键入文本”keyword”

      4双击push button部件,键入文本”find”

      5在属性面板,改变objectname为findbutton

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      6

按ctrl+a(或者cmd+a)选中这些部件,点击”水平布局”(在linux和window平台上按ctrl+h,在os

x平台上按ctrl +shift + h)应用一个水平布局(qhboxlayout)。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      7拖拽一个text edit部件(qtextedit)到界面上去。

      8选中设计窗口空白区域,点击”垂直布局”(或按ctrl

+ l)来应用一个水平布局(qvboxlayout)。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

应用水平和垂直布局确保在不同的屏幕上的自适应。

9当用户点击find按钮的时候,将调用一个find方法,如果您想实现这个功能,您可以使用qt中的信号(signals)和槽(slots)机制。当特定的事件发生时候一个信号(signal)将被发散(emitted),与此同时,一个槽函数(slot)将会被调用来响应这个特定的信号。在qt

widgets的qt designer中有一些预先定义好的信号(signals)和槽(slots)可以供您直接使用。接下来为find函数添加槽:

右击”find”按钮打开一个右键菜单。

选择 “转到槽” >clicked(),接着选择.

一个私有类型的槽函数on_findbutton_clicked()被添加到了头文件textfinder.h中去,一个私有的函数textfinder::on_findbutton_clicked()被添加到源文件textfinder.cpp源文件中。

截图如下:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

头文件部分截图:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      10按ctrl+s(或cmd

+ s)保存您的改变。

      如果想了解更多关于通过qtdesigner来设计界面的信息,查看qt

designer手册(http://doc.qt.io/qt-5/qtdesigner-manual.html)

完善头文件:

   在textfinder.h文件里面已经有了必要的头文件#include,一个构造函数,一个析构函数,和一个ui对象,你需要添加私有的函数loadtextfile(),读取并且显示文本的中的内容到qtextedit中去。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      2添加私有函数到私有区域,在ui::textfinder指针后面,插入一下的代码片段

privateslots:

   voidon_findbutton_clicked();

private:

   ui::textfinder*ui;

   voidloadtextfile();

//加载文件的方法

完善源码文件:

      现在头文件已经完成了,接下来转到源文件:textfinder.cpp.

      1在项目面板中的编辑视图,双击源文件textfinder.cpp,开始编辑。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      2在loadtextfile里面,加载一个文件使用qfile,读取文件内容使用qtextstream,显示文本内容到textedit使用qtextedit::setplaintext()函数,注意的是若想使用qfile和qtextstream,需要导入如下头文件:

#include <qfile>

#include <qtextstream>

      3loadtextfile函数的内容如下:

voidtextfinder::loadtextfile()

{

   //加载资源文件input.txt,关于资源文件的加载将下文讲述

   qfileinputfile(":/input.txt");

   inputfile.open(qiodevice::readonly);

   qtextstreamin(&inputfile);

   qstringline=in.readall();

   inputfile.close();

   ui->textedit->setplaintext(line);

   qtextcursorcursor=ui->textedit->textcursor();

   cursor.moveposition(qtextcursor::start,qtextcursor::moveanchor,1);

}

      4在on_findbutton_clicked()槽函数里,通过qtextedit::find()方法可以查找在文本文件中的字符串。下面是代码片段:

voidtextfinder::on_findbutton_clicked()

   qstringsearchstring=ui->lineedit->text();

   ui->textedit->find(searchstring,qtextdocument::findwholewords);

      5

当这两个方法都完成之后,在构造方法里添加一行代码来调用loadtextfile(),代码片段如下:

textfinder::textfinder(qwidget*parent):

   qwidget(parent),

   ui(newui::textfinder)

   ui->setupui(this);

   //调用加载文件的方法

   loadtextfile();

      on_findbutton_clicked()槽函数将会被自动生成到ui_textfinder.h中下面的一行代码调用:

qmetaobject::connectslotsbyname(textfinder);

创建资源文件:

      您需要一个资源文件(.qrc),这个资源文件嵌入了您输入的文本文件。这个文本文件可以是任意添加了一段文本的.txt文件。创建一个叫做input.txt的文件,并且将它存储在和源代码所在的同级目录里。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

添加资源文件:

      1选择file (文件)>

new file or project(新建文件或项目) > qt>qt resource file(qt资源文件)>

choose;

选择位置对话框如下:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      2在名称文本框中,键入textfinder

      3在路径文本框中,键入e:\examples\textfinder,点击”下一步”或者”继续”。项目管理对话框打开了:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      4在”添加到项目”域,选择textfinder.pro,点击完成。在代码编辑器中打开这个.qrc文件.

5右击textfinder.qrc,选择右键菜单中的addprefix

      6在prefix文本域里面,用斜线(/)替换掉默认的prefix.

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

      7右击textfinder.qrc,选择右键菜单中的”添加现有文件”。然后定位到input.txt文件所在的位置,添加进去。

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

编译和运行您的程序:

      至此为止,您已经有了所有必要的文件,您可以点击按钮来编译和运行您的程序了。截图如下:

一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
一步步创建Qt Widget项目+TextFinder案例(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

继续阅读