Qt编写物联网管理平台30-用户登录退出
生活随笔
收集整理的這篇文章主要介紹了
Qt编写物联网管理平台30-用户登录退出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
一個用戶登錄界面,是一個完整的應用系統,尤其是客戶端系統必備的一個功能模塊,傳統的登錄處理一般都是和本地的用戶信息進行比對,而現代的登錄系統一般是發送請求到服務器進行驗證,無論何種方式,都是需要去用戶信息表找到對應的用戶信息,取出密碼進行驗證,再多一點的話就是順帶把對應的用戶權限也拉過去。
為了使得多個系統共用一套用戶登錄用戶退出的界面和代碼,特意提煉出了共同點,作為通用的用戶登錄退出模塊,放在core_form模塊中,這樣后期有更新或者BUG修復,只需要更改這個通用模塊就行,陸續寫過很多系統,都設計到用戶登錄退出處理邏輯,追求極致簡單原則,羅列下通用的用戶登錄退出需要的功能點。
- 下拉選擇用戶名稱。
- 密碼框密文顯示。
- 提供自動登錄復選框,等用戶登錄成功以后記住,下次啟動后自動以最后的用戶信息登錄。
- 提供記住密碼復選框,等用戶登錄成功以后記住,下次啟動后自動自動填入該用戶的密碼。
- 軟件標題自定義,可外部參數傳入。
- 密碼為空校驗。
- 三次密碼錯誤提示檢驗。
- 內置超級密碼,防止管理員忘記密碼。
- 登錄日志記錄存儲到數據庫。
- 密碼不區分大小寫。
- 用戶驗證通過,啟動主窗體。
- 用戶退出后發出全局退出事件信號通知退出,以便收到該信號的地方做處理。
二、功能特點
2.1 軟件模塊
2.2 基礎功能
2.3 特色功能
三、體驗地址
四、效果圖
五、相關代碼
#include "frmlogin.h" #include "ui_frmlogin.h" #include "quihelper.h" #include "dbquery.h" #include "frmmain.h"frmLogin::frmLogin(QWidget *parent) : QDialog(parent), ui(new Ui::frmLogin) {ui->setupUi(this);this->initStyle();this->initTitle();this->initForm();this->initIcon();QUIHelper::setFormInCenter(this); }frmLogin::~frmLogin() {delete ui; }void frmLogin::setBanner(const QString &image) {QString qss = QString("border-image:url(%1);").arg(image);ui->labName->setStyleSheet(qss); }void frmLogin::initStyle() {//初始化無邊框窗體QUIHelper::setFramelessForm(this, ui->widgetTitle, ui->labIco, ui->btnMenu_Close, false);//關聯關閉按鈕退出connect(ui->btnMenu_Close, SIGNAL(clicked()), this, SLOT(close()));connect(ui->btnClose, SIGNAL(clicked()), this, SLOT(close()));this->setBanner(":/image/bg_banner.jpg"); }void frmLogin::initTitle() {//設置標題并支持標題換行QString titleCn = AppConfig::TitleCn;if (titleCn.contains("\\n")) {titleCn.replace("\\n", "\n");}ui->labName->setText(titleCn);this->setWindowTitle(ui->labTitlex->text()); }void frmLogin::initForm() {//將對應用戶的密碼和類型存入鏈表,在用戶登錄時對比,比從數據庫中查詢速度要快.ui->cboxUserName->addItems(UserHelper::UserInfo_UserName);//設置最后登錄的用戶int index = ui->cboxUserName->findText(AppConfig::LastLoginer);ui->cboxUserName->setCurrentIndex(index);ui->txtUserPwd->setPlaceholderText("請輸入密碼");ui->txtUserPwd->setFocus();//設置按鈕默認回車鍵觸發ui->btnLogin->setDefault(true);//自動填入密碼if (AppConfig::AutoPwd) {ui->txtUserPwd->setText(UserHelper::UserInfo_UserPwd.at(index));}//設置是否否選自動登錄+記住密碼ui->ckAutoPwd->setChecked(AppConfig::AutoPwd);ui->ckAutoLogin->setChecked(AppConfig::AutoLogin);//樣式改變更新按鈕圖標connect(AppEvent::Instance(), SIGNAL(changeStyle()), this, SLOT(initIcon())); }void frmLogin::initIcon() {//圖片文件不存在則設置為圖形字體QUIHelper::setIconBtn(ui->btnLogin, ":/image/btn_ok.png", 0xf00c);QUIHelper::setIconBtn(ui->btnClose, ":/image/btn_close.png", 0xf00d); }void frmLogin::on_btnLogin_clicked() {//獲取填入的密碼,不區分大小寫,全部轉為大小比較QString userPwd = ui->txtUserPwd->text();userPwd = userPwd.toUpper();if (userPwd.isEmpty()) {QUIHelper::showMessageBoxError("密碼不能為空, 請重新輸入!", 3, true);ui->txtUserPwd->setFocus();return;}//密碼正確或者是超級密碼則表示成功int index = ui->cboxUserName->currentIndex();if ((userPwd == UserHelper::UserInfo_UserPwd.at(index).toUpper()) || userPwd == "A") {UserHelper::CurrentUserName = ui->cboxUserName->currentText();UserHelper::getUserInfo();DbQuery::addUserLog("用戶登錄");//記錄當前用戶,寫入到配置文件,下次啟動時顯示最后一次登錄用戶名AppConfig::AutoPwd = ui->ckAutoPwd->isChecked();AppConfig::AutoLogin = ui->ckAutoLogin->isChecked();AppConfig::LastLoginer = UserHelper::CurrentUserName;AppConfig::writeConfig();//如果是密碼A則為超級管理員默認所有權限都有if (userPwd == "A") {int count = UserHelper::UserPermission.count();for (int i = 0; i < count; ++i) {UserHelper::UserPermission[i] = true;}}//隱藏當前界面彈出主界面this->hide();frmMain *frm = new frmMain;frm->show();} else {//密碼錯誤計數static int errorCount = 0;errorCount++;if (errorCount >= 3) {errorCount = 0;QUIHelper::showMessageBoxError("密碼輸入錯誤次數超過三次, 系統將自動退出!", 5, true);exit(0);} else {QUIHelper::showMessageBoxError("密碼錯誤, 請重新輸入!", 3, true);ui->txtUserPwd->setFocus();}} }void frmLogin::on_cboxUserName_activated(int) {ui->txtUserPwd->clear();ui->txtUserPwd->setFocus(); }總結
以上是生活随笔為你收集整理的Qt编写物联网管理平台30-用户登录退出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows取证——注册表操作命令
- 下一篇: 从天猫双“11”预测,说说GMC的市场