天天看點

一步步建立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權威指南》,本文為試讀篇)

繼續閱讀