From 5083239929ab7cee3139188156519a651b594450 Mon Sep 17 00:00:00 2001 From: bobpan Date: Wed, 9 Dec 2020 09:54:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=8A=B6=E6=80=81=E6=A0=8F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E9=99=86=E7=95=8C=E9=9D=A2=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E4=B8=BA=E9=98=BB=E5=A1=9E=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tpMain/ProgressView.cpp | 8 +- src/userCtrl/QLoginDlg.cpp | 15 ++-- src/userCtrl/QLoginDlg.h | 4 +- src/userCtrl/QLoginModify.h | 2 +- src/userCtrl/QUserAddNew.cpp | 8 +- src/userCtrl/QUserAddNew.h | 10 +-- src/userCtrl/QUserBase.h | 19 ++--- src/userCtrl/QUserCtrl.cpp | 9 ++- src/userCtrl/QUserCtrl.h | 8 +- src/userCtrl/QUserManagerDlg.cpp | 42 +++++----- src/userCtrl/QUserManagerDlg.h | 2 +- src/userCtrl/QUserManagerDlg.ui | 4 +- src/userCtrl/Resources/app.png | Bin 0 -> 5841 bytes src/userCtrl/Resources/app2.png | Bin 0 -> 48804 bytes src/userCtrl/Resources/hzleaper.ico | Bin 0 -> 20729 bytes src/userCtrl/quserinfo_global.h | 12 +-- src/userCtrl/userinfo.qrc | 5 ++ tpvs17/QUserInfo/userinfo.qrc | 1 - tpvs17/tpMain/QModelMgrDlg.cpp | 6 +- tpvs17/tpMain/lpMainWin.cpp | 120 +++++++++++++++++++++++++++- tpvs17/tpMain/lpMainWin.h | 13 +-- 21 files changed, 207 insertions(+), 81 deletions(-) create mode 100644 src/userCtrl/Resources/app.png create mode 100644 src/userCtrl/Resources/app2.png create mode 100644 src/userCtrl/Resources/hzleaper.ico create mode 100644 src/userCtrl/userinfo.qrc diff --git a/src/tpMain/ProgressView.cpp b/src/tpMain/ProgressView.cpp index e91d94f..78f5a81 100644 --- a/src/tpMain/ProgressView.cpp +++ b/src/tpMain/ProgressView.cpp @@ -11,10 +11,10 @@ ProgressView::ProgressView(QWidget* parent) m_pProgressDialog = new QProgressDialog(parent); connect(m_pProgressDialog, SIGNAL(canceled()), this, SIGNAL(cancel())); - m_pProgressDialog->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); - m_pProgressDialog->setWindowIcon(QIcon(":/resource/logo-8.png")); - m_pProgressDialog->setWindowModality(Qt::ApplicationModal); - m_pProgressDialog->setAttribute(Qt::WA_ShowModal, true); +// m_pProgressDialog->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); +// m_pProgressDialog->setWindowIcon(QIcon(":/resource/logo-8.png")); +// m_pProgressDialog->setWindowModality(Qt::ApplicationModal); +// m_pProgressDialog->setAttribute(Qt::WA_ShowModal, true); } ProgressView::ProgressView(QString strTitle, QString strLabel, int nMax, QString strIcon) diff --git a/src/userCtrl/QLoginDlg.cpp b/src/userCtrl/QLoginDlg.cpp index b23754d..721045a 100644 --- a/src/userCtrl/QLoginDlg.cpp +++ b/src/userCtrl/QLoginDlg.cpp @@ -71,31 +71,30 @@ Q_SLOT void QLoginDlg::OnClicked() if (strUser.isEmpty()) { - QString strText = QString("

%1< / span>< / p>< / body>< / html>").arg(tr("用户名不能为空!!!")); - QMessageBox::information(this, tr("错误警告"), strText, QMessageBox::Ok); + QString strText = QObject::tr("

用户名不能为空!!!< / span>< / p>< / body>< / html>"); + QMessageBox::information(this, QObject::tr("错误警告"), strText, QMessageBox::Ok); return; } if (password.isEmpty()) { - QString strText = QString("

%1< / span>< / p>< / body>< / html>").arg(tr("密码不能为空!!!")); - QMessageBox::information(this, tr("错误警告"), strText, QMessageBox::Ok); + QString strText = QObject::tr("

密码不能为空!!!< / span>< / p>< / body>< / html>"); + QMessageBox::information(this, QObject::tr("错误警告"), strText, QMessageBox::Ok); return; } int nLevel = 0; if (_pUserDB->Login(strUser, password, nLevel)) { - QString strText = QString("

%1< / span>< / p>< / body>< / html>").arg(tr("登录成功")); + QString strText = QObject::tr("

登录成功< / span>< / p>< / body>< / html>"); _pUserDB->CurUser(); _PasswdLineEdit->clear(); emit(sgLogin(strUser, nLevel)); - accept(); } else { - QString strText = QString("

%1< / span>< / p>< / body>< / html>").arg(tr("密码错误!!!")); - QMessageBox::information(this, tr("错误警告"), strText, QMessageBox::Ok); + QString strText = QObject::tr("

密码错误!!!< / span>< / p>< / body>< / html>"); + QMessageBox::information(this, QObject::tr("错误警告"), strText, QMessageBox::Ok); } } else if (strObj == "login_Logoutpb") { diff --git a/src/userCtrl/QLoginDlg.h b/src/userCtrl/QLoginDlg.h index 906381e..167d910 100644 --- a/src/userCtrl/QLoginDlg.h +++ b/src/userCtrl/QLoginDlg.h @@ -1,10 +1,10 @@ -#ifndef _QLOGINDLG_H_ +#ifndef _QLOGINDLG_H_ #define _QLOGINDLG_H_ #include #include "ui_QLoginDlg.h" #include "QUserDB.h" -//登录窗口 +//¼ class QLoginDlg : public QDialog { Q_OBJECT diff --git a/src/userCtrl/QLoginModify.h b/src/userCtrl/QLoginModify.h index 5f642e7..8905af2 100644 --- a/src/userCtrl/QLoginModify.h +++ b/src/userCtrl/QLoginModify.h @@ -1,4 +1,4 @@ -#ifndef _LOGINMODIFY_H_ +#ifndef _LOGINMODIFY_H_ #define _LOGINMODIFY_H_ #include diff --git a/src/userCtrl/QUserAddNew.cpp b/src/userCtrl/QUserAddNew.cpp index 1eaaf0e..a777f13 100644 --- a/src/userCtrl/QUserAddNew.cpp +++ b/src/userCtrl/QUserAddNew.cpp @@ -68,22 +68,22 @@ Q_SLOT void QUserAddNew::onSlotOK() QString passwd2 = ui.m_Passwd2_lineEdit->text(); if (strName.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("用户名不能为空!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("用户名不能为空!")); return; } if (passwd1.isEmpty()|| passwd2.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("密码不能为空!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("密码不能为空!")); return; } if (m_strList.contains(strName)) { - QMessageBox::warning(this, tr("错误警告"), tr("该用户已存在,请另起名字!!!!!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("该用户已存在,请另起名字!!!!!")); return; } if (passwd1 != passwd2) { - QMessageBox::warning(this, tr("错误警告"), tr("两次输入的密码不一致,请重新输入密码!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("两次输入的密码不一致,请重新输入密码!")); return; } m_userInfo.mLevel = ui.m_Power_comboBox->itemData(ui.m_Power_comboBox->currentIndex()).toInt(); diff --git a/src/userCtrl/QUserAddNew.h b/src/userCtrl/QUserAddNew.h index 776869f..faf76ff 100644 --- a/src/userCtrl/QUserAddNew.h +++ b/src/userCtrl/QUserAddNew.h @@ -1,4 +1,4 @@ -#ifndef _QUSERADDNEW_H_ +#ifndef _QUSERADDNEW_H_ #define _QUSERADDNEW_H_ #include @@ -12,11 +12,11 @@ public: QUserAddNew(QWidget *parent = Q_NULLPTR); ~QUserAddNew(); - void SetFilterList(QStringList &strList);//用户名列表 用于查找重复字符 - void setUserInfo(UserInfo &userInfo);//新添加的用户 或需要修改的用户 - void setCurrentUser(UserInfo &userInfo);//当前登录的用户 用于根据权限显示对应的信息 + void SetFilterList(QStringList &strList);//ûб ڲظַ + void setUserInfo(UserInfo &userInfo);//ӵû Ҫ޸ĵû + void setCurrentUser(UserInfo &userInfo);//ǰ¼û ڸȨʾӦϢ void setTitle(QString str); - UserInfo getUserInfo();//或许新添加的用户信息 + UserInfo getUserInfo();//ӵûϢ Q_SLOT void onSlotOK(); Q_SLOT void onSlotCancle(); Q_SLOT void onSetDefaultPwd(); diff --git a/src/userCtrl/QUserBase.h b/src/userCtrl/QUserBase.h index d2d5d8e..580bd50 100644 --- a/src/userCtrl/QUserBase.h +++ b/src/userCtrl/QUserBase.h @@ -1,9 +1,8 @@ -#ifndef _USER_BASE_H_ +#ifndef _USER_BASE_H_ #define _USER_BASE_H_ #include #include #include -#pragma execution_character_set("utf-8") typedef struct tag_CustomUserInfo { QString strName; QString passwd; @@ -31,20 +30,18 @@ enum USER_LEVEL typedef QMap map_userInfos; static const QMap sc_level = { - { USER_LEVEL_ADM, QObject::tr("Administrator") }, - { USER_LEVEL_OPT, QObject::tr("operator") }, - { USER_LEVEL_FULL, QObject::tr("SuperRoot") } + { USER_LEVEL_ADM, QString::fromLocal8Bit("Ա") }, + { USER_LEVEL_OPT, QString::fromLocal8Bit("Ա") }, + { USER_LEVEL_FULL, QString::fromLocal8Bit("Ա") } }; -// const QString strAdministrator = QObject::tr("Administrator"); -// const QString stroperator = QObject::tr("operator"); -// const QString strSuperRoot = QObject::tr("SuperRoot"); -class IUserCtrl:public QObject { + +class IUserCtrl : public QObject { Q_OBJECT public: IUserCtrl() {}; ~IUserCtrl() {}; - virtual void CheckLogin() =0; - virtual void ShowUserMgrDlg() = 0; + virtual void CheckLogin(QWidget* parent = nullptr) =0; + virtual void ShowUserMgrDlg(QWidget* parent = nullptr) = 0; virtual void LogOutUser() =0; virtual QString CurUser() = 0; virtual int CurUserLevel() = 0; diff --git a/src/userCtrl/QUserCtrl.cpp b/src/userCtrl/QUserCtrl.cpp index 5c98da8..b4edc5a 100644 --- a/src/userCtrl/QUserCtrl.cpp +++ b/src/userCtrl/QUserCtrl.cpp @@ -61,17 +61,20 @@ QUserCtrl::~QUserCtrl() } } -void QUserCtrl::CheckLogin() +void QUserCtrl::CheckLogin(QWidget* parent) { - QStringList strList = _pUserDBSqlite->Users(-1); _LoginDlg->AddItems2List(strList); + _LoginDlg->setParent(parent); + _LoginDlg->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); _LoginDlg->show(); } -void QUserCtrl::ShowUserMgrDlg() +void QUserCtrl::ShowUserMgrDlg(QWidget* parent) { QDesktopWidget* desktop = QApplication::desktop();// + _pDlgUsersMgr->setParent(parent); + _pDlgUsersMgr->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); _pDlgUsersMgr->move((desktop->width() - _pDlgUsersMgr->width()) / 2, (desktop->height() - _pDlgUsersMgr->height()) / 2); _pDlgUsersMgr->SetUserAndLevel(_CurrentUserName, m_nLevel); _pDlgUsersMgr->OnUpdateUserList(); diff --git a/src/userCtrl/QUserCtrl.h b/src/userCtrl/QUserCtrl.h index 1bbe7f3..97f4eaf 100644 --- a/src/userCtrl/QUserCtrl.h +++ b/src/userCtrl/QUserCtrl.h @@ -13,8 +13,8 @@ public: QUserCtrl(QWidget* parent = 0); ~QUserCtrl(); - void CheckLogin(); - void ShowUserMgrDlg(); + void CheckLogin(QWidget* parent = nullptr); + void ShowUserMgrDlg(QWidget* parent = nullptr); void LogOutUser(); QString CurUser() { return _CurrentUserName; } //当前登录用户的用户名 int CurUserLevel() { return m_nLevel; } //当前登录用户的等级 @@ -25,8 +25,8 @@ public: QString _CurrentUserName; int m_nLevel{ 0 }; LogIndState m_State{ EM_LOGOUT }; -signals: - void sgCurrentUserInfo(QString userName, int level,int state); +//signals: +// void sgCurrentUserInfo(QString userName, int level,int state); private: QWidget* m_pMainWnd{ nullptr }; QUserDB* _pUserDBSqlite{ nullptr }; diff --git a/src/userCtrl/QUserManagerDlg.cpp b/src/userCtrl/QUserManagerDlg.cpp index 515d821..8d72576 100644 --- a/src/userCtrl/QUserManagerDlg.cpp +++ b/src/userCtrl/QUserManagerDlg.cpp @@ -5,7 +5,7 @@ #pragma execution_character_set("utf-8") QString levelName(int nLevel) { - QString strLevel = "无用户"; + QString strLevel = QString("无用户"); if (sc_level.contains(nLevel)) strLevel = sc_level[nLevel]; return strLevel; @@ -19,7 +19,7 @@ QUserManagerDlg::QUserManagerDlg(QUserDB* pLogic) setWindowFlags(Qt::WindowCloseButtonHint); setWindowIcon(QIcon(":/userinfo")); QStringList headerList; - headerList << tr("用户名") << tr("等级"); + headerList << QObject::tr("用户名") << QObject::tr("等级"); plistModel = QSharedPointer(new QStandardItemModel); plistModel->setHorizontalHeaderLabels(headerList); ui.tableView->setModel(plistModel.data()); @@ -41,7 +41,7 @@ void QUserManagerDlg::SetUserAndLevel(QString strName, int level) m_level = level; ui.label_UserName->setText(m_strName); if (m_strName.isEmpty()) - ui.label_UserName->setText(tr("未登录")); + ui.label_UserName->setText(QObject::tr("未登录")); ui.label_Status->setText(""); } @@ -50,16 +50,17 @@ void QUserManagerDlg::onAddUser() { if (m_strName.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("你还没登录,请登录或请联系管理员!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你还没登录,请登录或请联系管理员!")); return; } if (m_level <= 1) { - QMessageBox::warning(this, tr("错误警告"), tr("你当前没有权限添加用户,请登录!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你当前没有权限添加用户,请登录!")); return; } - QUserAddNew dlg; - dlg.setTitle(tr("添加新用户")); + QUserAddNew dlg(this); + dlg.setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + dlg.setTitle(QObject::tr("添加新用户")); UserInfo info; info.mLevel = m_level; info.strName = m_strName; @@ -71,7 +72,7 @@ void QUserManagerDlg::onAddUser() UserInfo m_userInfo = dlg.getUserInfo(); if (m_pUserDB->Replace(m_userInfo.strName, m_userInfo.passwd, m_userInfo.mLevel)) { - ui.label_Status->setText(tr("%1 添加完成!!!").arg(m_userInfo.strName)); + ui.label_Status->setText(QObject::tr("%1 添加完成!!!").arg(m_userInfo.strName)); OnUpdateUserList(); } } @@ -86,29 +87,29 @@ void QUserManagerDlg::onDelUser() QString strName = data.toString(); if (m_strName.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("你还没登录,请登录或请联系管理员!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你还没登录,请登录或请联系管理员!")); return; } if (strName.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("请选中你要删除的用户!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("请选中你要删除的用户!")); return; } if (strName == "root") { - QMessageBox::warning(this, tr("错误警告"), tr("你当前没有权限删除root用户,请联系超超级管理员!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你当前没有权限删除root用户,请联系超超级管理员!")); return; } if (strName == m_strName) { - QMessageBox::warning(this, tr("错误警告"), tr("你当前没有权限删除自己的账户,请联系管理员!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你当前没有权限删除自己的账户,请联系管理员!")); return; } - if (QMessageBox::Ok ==QMessageBox::warning(this, tr("错误警告"), tr("确定删除用户: %1 ?").arg(strName), QMessageBox::Cancel | QMessageBox::Ok, QMessageBox::Cancel)) + if (QMessageBox::Ok == QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("确定删除用户: %1 ?").arg(strName), QMessageBox::Cancel | QMessageBox::Ok, QMessageBox::Cancel)) { if (m_pUserDB->Delete(strName)) { - ui.label_Status->setText(tr("%1 已删除!").arg(strName)); + ui.label_Status->setText(QObject::tr("%1 已删除!").arg(strName)); OnUpdateUserList(); } } @@ -124,16 +125,17 @@ void QUserManagerDlg::onModifyUser() QString strName = data.toString(); if (m_strName.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("你还没登录,请登录或请联系管理员!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你还没登录,请登录或请联系管理员!")); return; } if (strName.isEmpty()) { - QMessageBox::warning(this, tr("错误警告"), tr("你没有选中需要修改的用户,请联系管理员!")); + QMessageBox::warning(this, QObject::tr("错误警告"), QObject::tr("你没有选中需要修改的用户,请联系管理员!")); return; } - QUserAddNew dlg; - dlg.setTitle(tr("修改用户信息")); + QUserAddNew dlg(this); + dlg.setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + dlg.setTitle(QObject::tr("修改用户信息")); UserInfo info; info.mLevel = m_level; info.strName = m_strName; @@ -145,7 +147,7 @@ void QUserManagerDlg::onModifyUser() UserInfo m_userInfo = dlg.getUserInfo(); if (m_pUserDB->Replace(m_userInfo.strName, m_userInfo.passwd, m_userInfo.mLevel)) { - ui.label_Status->setText(tr("%1 修改完成!!!").arg(m_userInfo.strName)); + ui.label_Status->setText(QObject::tr("%1 修改完成!!!").arg(m_userInfo.strName)); OnUpdateUserList(); } } @@ -158,7 +160,7 @@ void QUserManagerDlg::OnUpdateUserList() int i = 0; plistModel->clear(); QStringList headerList; - headerList << tr("用户名") << tr("职位")<setHorizontalHeaderLabels(headerList); for each(UserInfo item in v) diff --git a/src/userCtrl/QUserManagerDlg.h b/src/userCtrl/QUserManagerDlg.h index daa393a..3c29e04 100644 --- a/src/userCtrl/QUserManagerDlg.h +++ b/src/userCtrl/QUserManagerDlg.h @@ -1,4 +1,4 @@ -#ifndef _QUSERMANAGERDLG_H_ +#ifndef _QUSERMANAGERDLG_H_ #define _QUSERMANAGERDLG_H_ #include diff --git a/src/userCtrl/QUserManagerDlg.ui b/src/userCtrl/QUserManagerDlg.ui index f17b136..8ea6b32 100644 --- a/src/userCtrl/QUserManagerDlg.ui +++ b/src/userCtrl/QUserManagerDlg.ui @@ -9,8 +9,8 @@ 0 0 - 515 - 396 + 501 + 286 diff --git a/src/userCtrl/Resources/app.png b/src/userCtrl/Resources/app.png new file mode 100644 index 0000000000000000000000000000000000000000..b2bc4268772e9f10c30bbcbcec9b08134c284c80 GIT binary patch literal 5841 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 bF}ME*fo9fnC}(rT00000NkvXXu0mjfbtgVc literal 0 HcmV?d00001 diff --git a/src/userCtrl/Resources/app2.png b/src/userCtrl/Resources/app2.png new file mode 100644 index 0000000000000000000000000000000000000000..d47d80dcc768a04226d92185ad586518707e3b65 GIT binary patch literal 48804 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 A=l}o! literal 0 HcmV?d00001 diff --git a/src/userCtrl/quserinfo_global.h b/src/userCtrl/quserinfo_global.h index 1eb0287..dfa08e7 100644 --- a/src/userCtrl/quserinfo_global.h +++ b/src/userCtrl/quserinfo_global.h @@ -1,10 +1,12 @@ -#ifndef _QUSERINFO_GLOBAL_H_ +#ifndef _QUSERINFO_GLOBAL_H_ #define _QUSERINFO_GLOBAL_H_ #include #include "QUserBase.h" +//#include "vld.h" + #ifndef BUILD_STATIC -# if defined(QUSERINFO_LIB)//动态库 +# if defined(QUSERINFO_LIB)//̬ # define QUSERINFO_EXPORT Q_DECL_EXPORT # else # define QUSERINFO_EXPORT Q_DECL_IMPORT @@ -19,10 +21,10 @@ typedef IUserCtrl* (*_UserCtrlCreate)(); /* -使用方法: -添加global头文件 +ʹ÷ +globalͷļ -QLibrary lib("UserInfo");//库文件名 +QLibrary lib("UserInfo");//ļ _UserCtrlCreate func = (_UserCtrlCreate)lib.resolve("UserCtrlCreate"); IUserCtrl m_pUserCtrl = func(); */ diff --git a/src/userCtrl/userinfo.qrc b/src/userCtrl/userinfo.qrc new file mode 100644 index 0000000..c611af2 --- /dev/null +++ b/src/userCtrl/userinfo.qrc @@ -0,0 +1,5 @@ + + + Resources/app.png + + diff --git a/tpvs17/QUserInfo/userinfo.qrc b/tpvs17/QUserInfo/userinfo.qrc index 3181d28..c759e1f 100644 --- a/tpvs17/QUserInfo/userinfo.qrc +++ b/tpvs17/QUserInfo/userinfo.qrc @@ -1,6 +1,5 @@ - Resources/hzleaper.ico Resources/logo-8.png diff --git a/tpvs17/tpMain/QModelMgrDlg.cpp b/tpvs17/tpMain/QModelMgrDlg.cpp index 03175df..034f31d 100644 --- a/tpvs17/tpMain/QModelMgrDlg.cpp +++ b/tpvs17/tpMain/QModelMgrDlg.cpp @@ -58,9 +58,9 @@ QModelMgrDlg::QModelMgrDlg(IWheelCtrl *ptr, QWidget *parent) m_trainOneTsk->loadfunc(this, &QModelMgrDlg::TrainOneTskFunc); - m_pProgressView = new ProgressView(this); - m_pProgressView->setUseCancel(true); - connect(m_pProgressView, SIGNAL(cancel()), this, SLOT(onProgassCancel())); +// m_pProgressView = new ProgressView(this); +// m_pProgressView->setUseCancel(true); +// connect(m_pProgressView, SIGNAL(cancel()), this, SLOT(onProgassCancel())); //m_pProgressView->finish(); connect(this, SIGNAL(sgPrograssShow(QString, QString, int, int)), this, SLOT(onPrograssShow(QString, QString, int, int))); connect(this, SIGNAL(sgShowMsg(QString)), this, SLOT(onShowMessage(QString))); diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index 6d22b94..d2c7dcc 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -12,6 +12,7 @@ #include "qnettickthread.h" #include "QMessageBox" #include "ChannelInfo.h" +#include "HubBase.h" #pragma execution_character_set("utf-8") lpMainWin::lpMainWin(QWidget *parent) @@ -51,7 +52,42 @@ lpMainWin::lpMainWin(QWidget *parent) QString strLangeage = languageSetting.value("language", "Chinese").toString(); SetLanguage(strLangeage); } + { + m_pLbCurrentTime = new QLabel(tr("ϵͳʱ")); + m_pLbBanci = new QLabel(tr("Ϣ")); + m_pLbDetectState = new QLabel(tr("״̬")); + m_pLbUser = new QLabel(tr("û")); + + QFont m_font; + m_font.setBold(true); + m_font.setPixelSize(12); + + m_pLbCurrentTime->setFont(m_font); + m_pLbCurrentTime->setMinimumHeight(40); + m_pLbCurrentTime->setMinimumWidth(200); + m_pLbCurrentTime->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + + + m_pLbBanci->setMinimumWidth(200); + m_pLbBanci->setFont(m_font); + m_pLbBanci->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + + m_pLbDetectState->setMinimumWidth(200); + m_pLbDetectState->setFont(m_font); + m_pLbDetectState->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + + //m_pLbOnLine = new class QLabel("ģʽ"); + //m_pLbOnLine->setMinimumWidth(c_nWidth); + + m_pLbUser->setFont(m_font); + m_pLbUser->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + + ui.statusBar->addWidget(m_pLbDetectState, 1); + ui.statusBar->addWidget(m_pLbUser, 1); + ui.statusBar->addWidget(m_pLbBanci); + ui.statusBar->addPermanentWidget(m_pLbCurrentTime); + } //ûģ loadUserModel(); //ʼģ͹ģ @@ -169,6 +205,8 @@ lpMainWin::lpMainWin(QWidget *parent) connect(m_pCtrl, SIGNAL(sgModelChanged()), m_pTableCheck, SLOT(updateModels())); m_pTableCheck->setModelList(forDefectList); } + + m_timerID = startTimer(1000); } lpMainWin::~lpMainWin() @@ -217,6 +255,28 @@ lpMainWin::~lpMainWin() pTickThread = NULL; qDebug() << "delete pTickThread end"; } + { + if (m_pLbCurrentTime) + { + delete m_pLbCurrentTime; + m_pLbCurrentTime = nullptr; + } + if (m_pLbBanci) + { + delete m_pLbBanci; + m_pLbBanci = nullptr; + } + if (m_pLbDetectState) + { + delete m_pLbDetectState; + m_pLbDetectState = nullptr; + } + if (m_pLbUser) + { + delete m_pLbUser; + m_pLbUser = nullptr; + } + } if (m_pCtrl) { delete m_pCtrl; @@ -529,13 +589,13 @@ Q_SLOT void lpMainWin::onActionClicked() if ("action_userManager" == strObj) { if (m_pUserCtrl) { - m_pUserCtrl->ShowUserMgrDlg(); + m_pUserCtrl->ShowUserMgrDlg(this); } } else if ("action_Login" == strObj) { if (m_pUserCtrl) { - m_pUserCtrl->CheckLogin(); + m_pUserCtrl->CheckLogin(this); } } else if ("action_about" == strObj) { @@ -644,7 +704,56 @@ Q_SLOT void lpMainWin::onButtonClicked() void lpMainWin::timerEvent(QTimerEvent *event) { + if (event->timerId() == m_timerID) { + QString str = tr("ϵͳʱ䣺 "); + QString strDetectState = tr("״̬:") + (m_pState->IsDetect == true ? tr("...") : tr("δ...")); +// if (strLanguage != "Chinese") +// { +// str = "Time:"; +// strDetectState = tr("State:") + (m_pState->IsDetect == true ? tr("Detecting...") : tr("Undetect...")); +// } + + if (m_pLbCurrentTime) { + QString m_currentTimerString = hubBase::genDateTime(); + m_pLbCurrentTime->setText(str + m_currentTimerString + " "); + m_pLbCurrentTime->setStyleSheet("font: 14px;"); + } + + // state + if (m_pLbDetectState) { + + m_pLbDetectState->setText(strDetectState); + if (m_pState->IsDetect) { + m_pLbDetectState->setStyleSheet("font: bold 14px;background-color: green;"); + } + else { + m_pLbDetectState->setStyleSheet("font: bold 14px;background-color: red;"); + } + } + if (m_pLbBanci) { + QString show_label; + if (m_pCtrl) + show_label = m_pCtrl->getCurrentBan(); + + QString strMsg = tr("Ϣ") + (show_label.isEmpty() == true ? tr("ʱδð") : show_label); +// if (strLanguage != "Chinese") +// { +// strMsg = tr("Classes:") +// + (show_label.isEmpty() == true ? tr("No set Times") : show_label); +// } + m_pLbBanci->setText(strMsg); + m_pLbBanci->setStyleSheet("font: 14px;"); + } + if (m_pLbUser) { + QString show_label = m_pCtrl->getUserName(); +// if (strLanguage != "Chinese") +// m_pLbUser->setText(tr("User:") + show_label); +// else + m_pLbUser->setText(tr("ǰû") + show_label); + m_pLbUser->setStyleSheet("font: 14px;"); + } + } } void lpMainWin::closeEvent(QCloseEvent *event) @@ -796,6 +905,7 @@ Q_SLOT void lpMainWin::onThickness(double dValue) { m_pCtrl->appendThicknessValue(dValue); } + Q_SLOT void lpMainWin::onDetectStateRecv(int nIndex, int value) { nIndex -= 1; @@ -812,6 +922,7 @@ Q_SLOT void lpMainWin::onDetectStateRecv(int nIndex, int value) } } } + Q_SLOT void lpMainWin::onClearLibRev(bool state) { /*յӦ*/ @@ -823,6 +934,7 @@ Q_SLOT void lpMainWin::onClearLibRev(bool state) SendModelLibTask->start(); } } + //յ رնʱ Q_SLOT void lpMainWin::onPulseRev() { @@ -833,10 +945,12 @@ Q_SLOT void lpMainWin::onPulseRev() m_RestartServerCount = 0; } } + Q_SLOT void lpMainWin::onRecvTrigPara() { emit(sgShowMsgdlg(tr("PLCյò"))); } + Q_SLOT void lpMainWin::onReadDetectState(int nIndex, QString strModel) { nIndex -= 1; @@ -852,6 +966,7 @@ Q_SLOT void lpMainWin::onReadDetectState(int nIndex, QString strModel) } } } + Q_SLOT void lpMainWin::onReadDetectStateASK() { QMap *ptr = m_pCtrl->getAllModelMapPtr(); @@ -916,6 +1031,7 @@ Q_SLOT void lpMainWin::onShutDownComputer() } ExitWindowsEx(EWX_SHUTDOWN, SHTDN_REASON_MAJOR_OTHER); } + //*********************************************************************** Q_SLOT void lpMainWin::onPulseTimer() { diff --git a/tpvs17/tpMain/lpMainWin.h b/tpvs17/tpMain/lpMainWin.h index fcf1ba0..c7de6bc 100644 --- a/tpvs17/tpMain/lpMainWin.h +++ b/tpvs17/tpMain/lpMainWin.h @@ -114,9 +114,6 @@ private: void SendResultStr2PLC(Result2Ui* m_Res); void SendResultChannel2PLC(Result2Ui* m_Res); void SendResultChannelCOM(Result2Ui* m_Res); - // template -// _Widget* replaceWidget(QWidget* pSrcWidget); - protected: virtual void timerEvent(QTimerEvent *event); virtual void closeEvent(QCloseEvent *event); @@ -128,10 +125,14 @@ private: class QLabel* main_lb_res_Channle_Show{ nullptr }; class QLabel* main_label_state{ nullptr }; class QLabel* main_showWorkLabel{ nullptr }; - class ModelsView *m_pTableCheck{ nullptr }; - RoiImgViewer *m_ImgViewer{ nullptr }; + RoiImgViewer *m_ImgViewer{ nullptr };//չʾͼ +/*status ״̬*/ + class QLabel* m_pLbCurrentTime{ nullptr };//ʾϵͳʱ + class QLabel* m_pLbBanci{ nullptr };//ʾ + class QLabel* m_pLbDetectState{ nullptr };//ʾ״̬ + class QLabel *m_pLbUser{ nullptr };//ʾ½ûϢ private: CDllCoreCtrl* m_pDllCoreCtrl{ nullptr }; ICoreCtrl* m_pCoreCtrl{ nullptr }; @@ -171,6 +172,8 @@ private: IUserCtrl *m_pUserCtrl{ nullptr };//ûģ QVector m_VecTranPtr;//ʻ԰ + + int m_timerID{ 0 };//ʱ ״̬Ϣ }; #endif