QT 登陸對話框


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

正文


 

一、創建項目

 

1. 新建Qt Gui 應用,項目名稱為“login ”,類名和基類保持MainWindow QMainWindow 不變。

 

2. 完成項目創建后,向項目中添加新的Qt 設計師界面類,模板選擇Dialog without Buttons ,類名更改為LoginDialog 。完成后向界面上添加兩個標簽Label 、兩個行編輯器Line Edit 和兩個按鈕Push Button ,設計界面如下圖所示。
<ignore_js_op> 3-1登錄對話框設計界面.png

 

3. 這里在屬性編輯器中將用戶名后面的行編輯器的object Name 屬性更改為usrLineEdit ,密碼后面的行編輯器為pwdLineEdit ,登錄按鈕為loginBtn ,退出按鈕為exitBtn 。如下圖所示。
<ignore_js_op> 3-2修改objectName.png


4.下面我們使用另外一種信號和槽的關聯方法來設置退出按鈕。在設計模式下面的信號和槽編輯器中,先點擊左上角的綠色加號添加關聯,然后選擇發送者為exitBtn,信號為clicked(),接收者為LoginDialog,槽為close()。如下圖所示。這樣,當單擊退出按鈕時,就會關閉登錄對話框。

<ignore_js_op> 3-3信號和槽編輯器中設置關聯.png

 

5. 右擊登錄按鈕,在彈出的菜單中選擇“轉到槽”,然后選擇clicked() 信號並確定。轉到相應的槽以后,添加函數調用:
void   LoginDialog :: on_loginBtn_clicked()
{
     accept ();
}

 

6. 下面到main.cpp 文件,更改內容如下:
#include   <QtGui/QApplication>
#include   "mainwindow.h"
#include   "logindialog.h"
int   main(int argc, char *argv[])
{
     QApplication   a(argc,   argv);
     MainWindow   w;
     LoginDialog   dlg;
     if   (dlg. exec() == QDialog::Accepted)
     {
        w. show();
        return   a. exec();
     }
     else   return   0 ;         
}
 
7. 這時運行程序,按下退出按鈕會退出程序,按下登錄按鈕會關閉登錄對話框,並顯示主窗口。

 

二、登錄設置

 

1. 下面添加代碼來實現使用用戶名和密碼登錄,這里我們只是簡單的將用戶名和密碼設置為了固定的字符串。到logindialog.cpp 文件中將登錄按鈕的單擊信號對應的槽的代碼更改為:
void   LoginDialog :: on_loginBtn_clicked()
{
// 判斷用戶名和密碼是否正確,
// 如果錯誤則彈出警告對話框
     if ( ui -> usrLineEdit -> text() == tr("yafeilinux") &&
            ui -> pwdLineEdit -> text() == tr("123456"))
     {
        accept ();
     }   else   {
        QMessageBox :: warning(this, tr("Waring"),
                              tr("user name or password error!"),
                              QMessageBox :: Yes );
     }
}
Qt 中的QMessageBox 類提供了多種常用的對話框類型,比如這里的警告對話框,還有提示對話框,問題對話框等。這里使用了靜態函數來設置了一個警告對話框,這種方式很方便。其中的參數依次是:this 表明父窗口是登錄對話框;然后是窗口標題;然后是顯示的內容;最后一個參數是顯示的按鈕,這里使用了一個Yes 按鈕。大家注意還要添加該類的頭文件包含,即: #include   <QMessageBox>

 

2. 下面運行程序,如果輸入用戶名為“yafeilinux ”,密碼為“123456 ,那么可以登錄,如果輸入其他的字符,則會彈出警告對話框,如下圖所示。
<ignore_js_op> 3-4登錄警告對話框.png

 

3. 對於輸入的密碼,我們常見的是顯示成小黑點的樣式。下面點擊logindialog.ui 文件進入設計模式,然后選中界面上的密碼行編輯器,在屬性編輯器中將echoMode 屬性選擇為Password 。這時再次運行程序,可以看到密碼顯示已經改變了。如下圖所示。
<ignore_js_op> 3-5密碼樣式.png

 

        當然,除了在屬性編輯器中進行更改,也可以在loginDialog 類的構造函數中使用setEchoMode(QLineEdit::Password) 函數來設置。

 

4. 在行編輯器的屬性欄中還可以設置占位符,就是沒有輸入信息前的一些提示語句。例如將密碼行編輯器的placeholderText 屬性更改為“請輸入密碼”,將用戶名行編輯器的更改為“請輸入用戶名”,運行效果如下圖所示。
<ignore_js_op> 3-6占位符.png

 

5. 對於行編輯器,還有一個問題就是,比如我們輸入用戶名,在前面添加了一個空格,這樣也可以保證輸入是正確的,這個可以使用QString 類的trimmed() 函數來實現,它可以去除字符串前后的空白字符。下面將logindialog.cpp 文件中登錄按鈕單擊信號槽函數中的判斷代碼更改為:
if ( ui -> usrLineEdit -> text().trimmed() == tr("yafeilinux")
             &&   ui -> pwdLineEdit -> text() == tr("123456"))
這時運行程序,已經實現相應的功能了。
 

 

6. 最后,當登錄失敗后,我們希望可以清空用戶名和密碼信息,並將光標定位到用戶名輸入框中。這個可以通過在判斷用戶名和密碼錯誤后添加相應的代碼來實現:
 
void   LoginDialog :: on_loginBtn_clicked()
{
     //   判斷用戶名和密碼是否正確,如果錯誤則彈出警告對話框
     if ( ui -> usrLineEdit -> text().trimmed() == tr("yafeilinux")
            &&   ui -> pwdLineEdit -> text() == tr("123456"))
     {
        accept ();
     }   else   {
        QMessageBox :: warning(this, tr("Waring"),
                              tr("user name or password error!"),
                              QMessageBox :: Yes );
        //   清空內容並定位光標
        ui -> usrLineEdit -> clear();
        ui -> pwdLineEdit -> clear();
        ui -> usrLineEdit -> setFocus();
     }
}
        下面運行程序,大家可以測試一下效果。

 

7. 這里再補充一個技巧,也就是Qt Creator 的代碼補全功能。Qt Creator 有很強大的代碼補全功能,比如輸入一個關鍵字時,只要輸入前幾個字母,就會彈出相關的關鍵字的選擇列表;輸入完一個對象,然后輸入點以后,就會彈出該對象所有可用的變量和函數。這里要說的是,當輸入一個比較長得函數或變量名時,可以通過其中的幾個字母來定位。比如說,要輸入前面講到的setFocus() 函數,那么只需輸入首字母s 和后面的大寫字母F 即可,這樣可以大大縮減提示列表,如果還沒有定位到,那么可以輸入F 后面的字母。如下圖所示。
<ignore_js_op> 3-7代碼補全功能.png

 

我們還可以使用ctrl +  空格鍵來強制代碼補全,不過這個一般會和我們的輸入法的快捷鍵沖突,大家可以更改輸入法的快捷鍵,也可以在Qt Creator 中的工具→選項→環境→鍵盤中來設置快捷鍵。


結語


        這一節又講解了一種信號和槽的關聯方法,還講解了一些部件的屬性設置等內容。在 Qt Creator快速入門》 一書中還講解了大量常用的部件的使用說明,大家可以參考一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM