建立一個基于應用的qtwidget應用程式
這個手冊描述了怎樣使用qtcreater建立個一個小的qt應用程式,text
finder.它是qt工具text finder例子的簡寫版本。這個應用程式的使用者界面通過使用qt
designer來構造生成。邏輯上來說,這個應用程式是通過代碼編輯器上編寫c++代碼實作的。
建立text finder項目案例:
1選擇file(檔案)>
new fileor project(建立檔案或項目) > application(應用程式)>
qtwidgets application > choose(選擇)
接着打開了項目介紹和位置視窗
2在名稱的文本框中,填寫textfinder
3在建立路徑的文本框中,鍵入項目檔案存儲路徑,例如:e:\examples,接着點選”下一步”(在windows和linux平台)或者”繼續”(在os
x平台上)。
建構套件對話框打開了:
4為運作您的項目選擇建構套件,接着點選”下一步”或者”繼續”
注意:如果一個套件在”工具
> 選項 >編譯和運作 >kits”,這個對話框将會跳過。
接着”類資訊”對話框打開了:
5在類名的文本框中,textfinder作為類名。
6在基類清單裡,選擇qwidget作為基類類型。
注意:頭檔案,源檔案和界面檔案将根據類名自動比對。
7點選next和繼續。
接着”項目管理”視窗被打開:
8檢查項目設定,并且點選”完成”(在windows和linux平台)或者”繼續”(在os
x平台)
textfinder項目包含以下檔案:
textfinder.h
截圖:
textfinder.cpp
main.cpp
textfinder.ui
textfinder.pro
添加缺少部分:
開始設計使用者界面,添加缺少的代碼,實作查找功能。
設計使用者界面:
1在qt creater中的edit編輯模式裡,輕按兩下textfind.ui檔案,轉到qt設計界面。
2拖拽下面的部件到界面中:
label(qlabel)
line edit(qlineedit)
pushbutton(qpushbutton)
注意:如果想快速定位這些部件,可以使用在工具欄上部的搜尋視窗。
例如,查找label部件,可以輸入label進行查找:
3輕按兩下label部件,鍵入文本”keyword”
4輕按兩下push button部件,鍵入文本”find”
5在屬性面闆,改變objectname為findbutton
6
按ctrl+a(或者cmd+a)選中這些部件,點選”水準布局”(在linux和window平台上按ctrl+h,在os
x平台上按ctrl +shift + h)應用一個水準布局(qhboxlayout)。
7拖拽一個text edit部件(qtextedit)到界面上去。
8選中設計視窗空白區域,點選”垂直布局”(或按ctrl
+ l)來應用一個水準布局(qvboxlayout)。
應用水準和垂直布局確定在不同的螢幕上的自适應。
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源檔案中。
截圖如下:
頭檔案部分截圖:
10按ctrl+s(或cmd
+ s)儲存您的改變。
如果想了解更多關于通過qtdesigner來設計界面的資訊,檢視qt
designer手冊(http://doc.qt.io/qt-5/qtdesigner-manual.html)
完善頭檔案:
在textfinder.h檔案裡面已經有了必要的頭檔案#include,一個構造函數,一個析構函數,和一個ui對象,你需要添加私有的函數loadtextfile(),讀取并且顯示文本的中的内容到qtextedit中去。
2添加私有函數到私有區域,在ui::textfinder指針後面,插入一下的代碼片段
privateslots:
voidon_findbutton_clicked();
private:
ui::textfinder*ui;
voidloadtextfile();
//加載檔案的方法
完善源碼檔案:
現在頭檔案已經完成了,接下來轉到源檔案:textfinder.cpp.
1在項目面闆中的編輯視圖,輕按兩下源檔案textfinder.cpp,開始編輯。
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的檔案,并且将它存儲在和源代碼所在的同級目錄裡。
添加資源檔案:
1選擇file (檔案)>
new file or project(建立檔案或項目) > qt>qt resource file(qt資源檔案)>
choose;
選擇位置對話框如下:
2在名稱文本框中,鍵入textfinder
3在路徑文本框中,鍵入e:\examples\textfinder,點選”下一步”或者”繼續”。項目管理對話框打開了:
4在”添加到項目”域,選擇textfinder.pro,點選完成。在代碼編輯器中打開這個.qrc檔案.
5右擊textfinder.qrc,選擇右鍵菜單中的addprefix
6在prefix文本域裡面,用斜線(/)替換掉預設的prefix.
7右擊textfinder.qrc,選擇右鍵菜單中的”添加現有檔案”。然後定位到input.txt檔案所在的位置,添加進去。
編譯和運作您的程式:
至此為止,您已經有了所有必要的檔案,您可以點選按鈕來編譯和運作您的程式了。截圖如下: