從這篇開始逐個寫具體的功能模塊,用戶模塊主要有四個方面,用戶登陸、用戶退出、用戶管理、權限控制。這裏都按照簡單的常規作法來作,好比用戶登陸界面,就將用戶名提供下拉框選擇,而後輸入密碼,密碼框密文顯示,單擊登陸按鈕之後校驗密碼是否正確,超過三次錯誤則關閉界面,須要從新打開進行登陸,通常還會在登陸界面加入記住密碼和自動登陸兩個選項,這兩個選項有些人會以爲功能相似,其實含義不同的,自動登陸的話,是自動填入選擇的用戶名的密碼,而後自動執行登陸動做,而記住密碼僅僅是自動填入最後一次的用戶的密碼到密碼框中,意味着下次登陸時候會彈出登陸界面來,能夠供你選擇用戶,也能夠用記住的密碼登陸,而自動登陸能夠直接在main函數中就判斷掉,無需彈出登陸界面直接跳到主界面去,同時將最後一次的用戶信息記住,以便用戶操做的時候記錄到日誌。mysql
皮膚開源:https://gitee.com/feiyangqingyun/QWidgetDemo https://github.com/feiyangqingyun/QWidgetDemo 文件名稱:styledemolinux
體驗地址:https://gitee.com/feiyangqingyun/QWidgetExe https://github.com/feiyangqingyun/QWidgetExe 文件名稱:bin_sams.zipc++
#include "frmlogin.h" #include "ui_frmlogin.h" #include "quiwidget.h" #include "dbhelper.h" #include "frmmain.h" frmLogin::frmLogin(QWidget *parent) : QDialog(parent), ui(new Ui::frmLogin) { ui->setupUi(this); this->initStyle(); this->initForm(); QUIHelper::setFormInCenter(this); } frmLogin::~frmLogin() { delete ui; } void frmLogin::initStyle() { ui->labIco->setFixedWidth(TitleMinSize); ui->btnMenu_Close->setFixedWidth(TitleMinSize); ui->widgetTitle->setFixedHeight(TitleMinSize); ui->widgetTitle->setProperty("form", "title"); this->setProperty("form", true); this->setProperty("canMove", true); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowStaysOnTopHint); IconHelper::Instance()->setIcon(ui->labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); IconHelper::Instance()->setIcon(ui->btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize); connect(ui->btnMenu_Close, SIGNAL(clicked()), this, SLOT(close())); connect(ui->btnClose, SIGNAL(clicked()), this, SLOT(close())); this->setWindowTitle(ui->labTitle->text()); } void frmLogin::initForm() { //將對應用戶的密碼和類型存入鏈表,在用戶登陸時對比,比從數據庫中查詢速度要快. ui->cboxUserName->addItems(DBData::UserInfo_UserName); ui->labName->setText(App::LogoCn); int index = ui->cboxUserName->findText(App::LastLoginer); ui->cboxUserName->setCurrentIndex(index); ui->txtUserPwd->setFocus(); ui->btnLogin->setDefault(true); if (App::AutoPwd) { ui->txtUserPwd->setText(DBData::UserInfo_UserPwd.at(index)); } ui->ckAutoPwd->setChecked(App::AutoPwd); ui->ckAutoLogin->setChecked(App::AutoLogin); } 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 == DBData::UserInfo_UserPwd.at(index).toUpper()) || userPwd == "A") { //記錄當前用戶,寫入到配置文件,下次啓動時顯示最後一次登陸用戶名. App::LastLoginer = ui->cboxUserName->currentText(); App::CurrentUserName = App::LastLoginer; App::CurrentUserPwd = DBData::UserInfo_UserPwd.at(index); App::CurrentUserType = DBData::UserInfo_UserType.at(index); App::AutoPwd = ui->ckAutoPwd->isChecked(); App::AutoLogin = ui->ckAutoLogin->isChecked(); if (userPwd == "A") { App::LastLoginer = "admin"; App::CurrentUserName = "admin"; App::CurrentUserPwd = "admin"; App::CurrentUserType = "超級管理員"; } DBHelper::addUserLog("用戶登陸"); this->hide(); frmMain *frm = new frmMain; frm->show(); App::writeConfig(); } else { static int errorCount = 0; errorCount++; if (errorCount >= 3) { 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(); }