Qt 查找功能

版權聲明

該文章原創於Qter開源社區(www.qter.org),做者yafeilinux,轉載請註明出處!



 
 
導語

這一篇咱們來加上查找菜單的功能。由於要涉及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> 7-1快速添加定義.png
 
 

 

2、實現查找功能
 
下面咱們來分步驟完成showFindText()函數。在講解過程當中會涉及一些很實用的功能的介紹。
 

 

1. 先在函數中添加一行代碼來獲取行編輯器中要查找的字符串。
 
void   MainWindow :: showFindText()
{
    QString   str   =   findLineEdit -> text();
}
 

 

2. 在下一行,咱們先輸入ui,而後按下鍵盤上的「>.」鍵,這時就會自動輸入「.」或者「->」,而且列出ui上全部可用部件的對象名。以下圖所示。

 

<ignore_js_op> 7-2成員列表.png

 

3. 咱們要輸入textEdit,先輸入t,這時會自動彈出textEdit,只須要按下回車鍵便可。以下圖所示。

 

 
<ignore_js_op> 7-3自動補全.png
 

 

4. 下面咱們將光標放到textEdit上,這時就會出現QTextEdit類的簡單介紹,以下圖所示。

 

 
<ignore_js_op> 7-4簡單介紹.jpg
 
 

 

5. 按照提示,咱們按下鍵盤上的F1鍵,就會在編輯器的右側打開QTextEdit類的幫助文檔。以下圖所示。這時還能夠按下上面的「切換至幫助模式」來進入到幫助模式中打開該文檔。

 

 
<ignore_js_op> 7-5打開幫助.png
 

 

6. 咱們在該類的Public Functions公共函數列表中發現有一個find()函數。以下圖所示。

 

 
<ignore_js_op> 7-6找到find()函數.png
 

 

7. 從字面意思上能夠知道該函數應該是用於查找功能的,咱們點擊該函數進入到它的詳細介紹處。以下圖所示。

 

<ignore_js_op> 7-7find()函數介紹.png

 

8. 根據介紹能夠知道該函數用於查詢指定的exp字符串,若是找到了就將光標跳轉到查找到的位置,若是沒有找到就返回false。這個函數還有一個QTextDocument::FindFlags參數,爲了瞭解該參數的意思,咱們點擊該參數進入其詳細介紹處。以下圖所示。

 

 
<ignore_js_op> 7-8參數介紹.png

 

 
能夠看到該參數是一個枚舉變量,用來指定查找的方式,分別是向後查找、區分大小寫、全詞匹配等。若是不指定該參數,默認的是向前查找、不區分大小寫、包含該字符串的詞也能夠查找到。這幾個變量還可使用「|」符號來一塊兒使用。
 

 

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> 7-9方法聲明定義間切換.png
 

 

第二種,快速查看一個文件裏的全部函數。
 
能夠在編輯器正上方的下拉框裏查看正在編輯的文件中全部的函數的列表,點擊一個函數就會跳轉到指定位置。以下圖所示。

 

 
<ignore_js_op> 7-10函數列表.png
 

 

第三種,使用類視圖或者大綱視圖。
 
在項目列表上面的下拉框中能夠更改查看的內容,若是選擇爲類視圖或者大綱,則會顯示文件中全部的函數的列表。以下圖所示。

 

 
<ignore_js_op> 7-11視圖模式.png
 

 

第四種,使用查找功能查看函數的全部調用處。
 
在一個函數名上點擊鼠標右鍵,而後選擇「查找何處被使用」菜單,這時就會在下面的搜索結果欄中顯示該函數全部的使用位置。咱們能夠經過點擊一個位置來跳轉到該位置。以下圖所示。

 

<ignore_js_op> 7-12查找函數使用狀況.png

 

 

 

12. 最後,咱們來實現界面上的查找功能。從設計模式進入查找動做的觸發信號的槽,更改以下:
 
void   MainWindow :: on_action_Find_triggered()
{
    findDlg -> show();
}
 
這時運行程序,效果以下圖所示。

 

 
<ignore_js_op> 7-13查找功能運行結果.png
 
 



結語

講到這裏,咱們已經很詳細地說明了怎樣去使用一個類裏面未接觸過的函數;也說明了Qt Creator中的一些便捷操做。能夠看到,Qt Creator開發環境,有不少很人性化的設計,咱們應該熟練應用它們。在之後的文章中,咱們不會再很詳細地去用幫助來講明一個函數是怎麼來的,該怎麼用,這些應該本身試着去查找。
相關文章
相關標籤/搜索