从这篇开始逐个写具体的功能模块,用户模块主要有四个方面,用户登陆、用户退出、用户管理、权限控制。这里都按照简单的常规作法来作,好比用户登陆界面,就将用户名提供下拉框选择,而后输入密码,密码框密文显示,单击登陆按钮之后校验密码是否正确,超过三次错误则关闭界面,须要从新打开进行登陆,通常还会在登陆界面加入记住密码和自动登陆两个选项,这两个选项有些人会以为功能相似,其实含义不同的,自动登陆的话,是自动填入选择的用户名的密码,而后自动执行登陆动做,而记住密码仅仅是自动填入最后一次的用户的密码到密码框中,意味着下次登陆时候会弹出登陆界面来,能够供你选择用户,也能够用记住的密码登陆,而自动登陆能够直接在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(); }