天天看點

「Qt入門第3篇」 基礎(三)Qt登入對話框

作者:QT教程

導語

在前一篇的内容中已經實作了登入對話框,這裡我們對其進行改進。在彈出對話框中填寫使用者名和密碼,按下登入按鈕,如果使用者名和密碼均正确則進入主視窗,如果有錯則彈出警告對話框。

環境是:Windows 7 + Qt 4.8.1+ Qt Creator 2.4.1

目錄

一、建立項目

二、登入設定

正文

一、建立項目

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

2.完成項目建立後,向項目中添加新的Qt設計師界面類,模闆選擇Dialog without Buttons,類名更改為LoginDialog。完成後向界面上添加兩個标簽Label、兩個行編輯器Line Edit和兩個按鈕Push Button,設計界面如下圖所示。

「Qt入門第3篇」 基礎(三)Qt登入對話框

3.這裡在屬性編輯器中将使用者名後面的行編輯器的object Name屬性更改為usrLineEdit,密碼後面的行編輯器為pwdLineEdit,登入按鈕為loginBtn,退出按鈕為exitBtn。如下圖所示。

「Qt入門第3篇」 基礎(三)Qt登入對話框

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

「Qt入門第3篇」 基礎(三)Qt登入對話框

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,那麼可以登入,如果輸入其他的字元,則會彈出警告對話框,如下圖所示。

「Qt入門第3篇」 基礎(三)Qt登入對話框

3.對于輸入的密碼,我們常見的是顯示成小黑點的樣式。下面點選logindialog.ui檔案進入設計模式,然後選中界面上的密碼行編輯器,在屬性編輯器中将echoMode屬性選擇為Password。這時再次運作程式,可以看到密碼顯示已經改變了。如下圖所示。

「Qt入門第3篇」 基礎(三)Qt登入對話框

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

4.在行編輯器的屬性欄中還可以設定占位符,就是沒有輸入資訊前的一些提示語句。例如将密碼行編輯器的placeholderText屬性更改為“請輸入密碼”,将使用者名行編輯器的更改為“請輸入使用者名”,運作效果如下圖所示。

「Qt入門第3篇」 基礎(三)Qt登入對話框

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後面的字母。如下圖所示。

「Qt入門第3篇」 基礎(三)Qt登入對話框

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

結語

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