QT手把手打造預約系統——登錄界面
效果展示
登錄界面處事窗口
- 在用戶ID處輸入用戶ID,沒用選擇用戶名是因爲可能存在同名學生,使用ID這種唯一標識更有區分性。
- 用戶在密碼區輸入密碼,且以密文形式展示,便於保密。
- 點擊登錄即可。
登錄異常
當用戶名或者密碼錯誤是,會有彈窗提示。
登錄成功
當用戶登錄成功後調轉到不同身份用戶的界面。本項目有學生、教師和管理員三個身份,所以系統會根據登錄人的ID自動跳轉到指定的用戶界面。
頁面UI設計
本案例直接使用QT自帶的拖拽的方式設計界面,具體用到的空間如下:
如圖所以,將箭頭左側位置的空間拖到右側區域並放置好位置即可,至於美觀性這個有興趣的可以後續研究。
登錄代碼實現
登錄界面只有一個登錄按鈕,即點擊登錄按鈕後做出相應的應答,所以直接在上圖中選擇登錄按鈕並右鍵轉到槽即可直接生成槽函數,即登錄按鈕對應的邏輯處理。
具體的邏輯功能有一下幾點:
- 從頁面獲取輸入的用戶ID和密碼,並在數據庫中查詢相應的數據,如果數據完全和數據庫一致,那麼就完成登錄,否則彈出提是框提示用戶。
- 數據庫中的密碼是MD5加密算法加密過的,所以在和數據庫進行比對之前也需要將頁面獲取的密碼進行加密。
- 通過用戶ID從數據庫獲取用戶身份,以便登錄成功跳轉到指定頁面。
具體代碼如下:
/************************************************
* 函數名:Widget::on_pushButton_clicked()
* 參數:無
* 返回值:無
* 描述:登錄按鈕槽函數
************************************************/
void Dialog::on_pushButton_clicked()
{
qDebug()<<"login";
QString userPWD; // 對話框中的密碼
QString truePWD; // 數據庫中的密碼
QString identity;
// 獲取對話框中的密碼
userPWD = ui->lineEdit_2->text();
// 從數據庫中獲取密碼
QSqlQuery query;
query.prepare("select pwd,identity,name from user_info where user_id = ?");
QString user_id = ui->lineEdit->text();
userID = user_id;
query.addBindValue(user_id);
query.exec();
query.next();
truePWD = query.value(0).toString();
identity = query.value(1).toString();
QString user_name = query.value(2).toString();
// 對密碼進行MD5加密
QString pwdMD5;
QByteArray str;
str = QCryptographicHash::hash(userPWD.toLatin1(), QCryptographicHash::Md5);
pwdMD5.append(str.toHex());
// 根據用戶身份確認接下來打開的窗口
if(identity == "student"){
globalIndex = 0;
}
else if(identity == "teacher"){
globalIndex = 1;
}
else {
globalIndex = 2;
}
if(userPWD != NULL && truePWD == pwdMD5){
qDebug() << "登錄";
userName = user_name; // 如果登錄成功,則賦給全局變量後面用
accept();
}
else{
QMessageBox::warning(this, "waring", "用戶名或密碼錯誤!", QMessageBox::Yes);
}
}
需要注意的是:在這之前需要保證數據庫連接正常,然後需要把代碼中對應的表改成自己的表,不然運行結果就是一場的。
系統其它功能連接:
[QT手把手打造預約系統——登錄界面]:https://blog.csdn.net/wtzhu_13/article/details/106530895
[QT手把手打造預約系統——管理員]:https://blog.csdn.net/wtzhu_13/article/details/106530981
[QT手把手打造預約系統——學生用戶]:https://blog.csdn.net/wtzhu_13/article/details/106531057
[QT手把手打造預約系統——教師用戶]:https://blog.csdn.net/wtzhu_13/article/details/106531134