410 lines
14 KiB
C++
410 lines
14 KiB
C++
|
#include "usermanager.h"
|
|||
|
#include "ui_usermanager.h"
|
|||
|
#include "cdatabaseinterface.h"
|
|||
|
#include "dbforrmate.h"
|
|||
|
#include <QDebug>
|
|||
|
#include <QCheckBox>
|
|||
|
#include <QMessageBox>
|
|||
|
#include "currentuserdata.h"
|
|||
|
#include "selectuserdialog.h"
|
|||
|
#include "deleteuserdialog.h"
|
|||
|
#include <QTimer>
|
|||
|
#include "languagemanager.h"
|
|||
|
#include "dataformate.h"
|
|||
|
|
|||
|
UserManager::UserManager(QWidget *parent) :
|
|||
|
QWidget(parent),
|
|||
|
ui(new Ui::UserManager),
|
|||
|
m_userDialog(nullptr),
|
|||
|
m_completer(nullptr),
|
|||
|
m_slectUserDialog(nullptr),
|
|||
|
m_deleteUserDialog(nullptr)
|
|||
|
{
|
|||
|
ui->setupUi(this);
|
|||
|
m_userDialog = new UserDialog();
|
|||
|
connect(m_userDialog,&UserDialog::signalUpdateUserTable,this,&UserManager::slotUpdateUserTable);
|
|||
|
initUserTableWidget();
|
|||
|
updateUserTableWidget();
|
|||
|
QTimer::singleShot(500,this,SLOT(setDefaultUser()));
|
|||
|
// setDefaultUser();
|
|||
|
connect(this,SIGNAL(signalCheckUserChanged(int)),ui->trainRecord_Widget,SLOT(slotCheckUserChanged(int)));
|
|||
|
|
|||
|
//设置搜索框自动补全
|
|||
|
m_completer = new QCompleter();
|
|||
|
m_completer->setFilterMode(Qt::MatchStartsWith);
|
|||
|
m_completer->setCompletionMode(QCompleter::PopupCompletion);
|
|||
|
m_completer->setMaxVisibleItems(7);
|
|||
|
m_completer->setModel(&stringListModel);
|
|||
|
ui->searchUser_LineEdit->setCompleter(m_completer);
|
|||
|
ui->searchUser_LineEdit->setPlaceholderText(tr("姓名或者ID"));
|
|||
|
connect(ui->searchUser_LineEdit,SIGNAL(editingFinished()),this,SLOT(editComplete()));
|
|||
|
|
|||
|
connect(ui->searchUser_LineEdit,&QLineEdit::textChanged,[this](const QString text){
|
|||
|
if(text == "")
|
|||
|
{
|
|||
|
updateUserTableWidget();
|
|||
|
}
|
|||
|
});
|
|||
|
// connect(ui->searchUser_LineEdit,&QLineEdit::textEdited,[this](const QString text){
|
|||
|
// qDebug()<<"textEdited"<<text;
|
|||
|
// });
|
|||
|
|
|||
|
m_slectUserDialog = new SelectUserDialog();
|
|||
|
m_deleteUserDialog = new DeleteUserDialog();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::editComplete()
|
|||
|
{
|
|||
|
//此处可用来自动添加被检索时没有的内容,可以将lineEdit中的内容添加到model中,但是在咱们这种情况下不适用
|
|||
|
//目前的需求是将数据库中有的数据显示出来,没有的不需要补全
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
UserManager::~UserManager()
|
|||
|
{
|
|||
|
if(m_userDialog)
|
|||
|
delete m_userDialog;
|
|||
|
if(m_completer)
|
|||
|
delete m_completer;
|
|||
|
if(m_slectUserDialog)
|
|||
|
delete m_slectUserDialog;
|
|||
|
if(m_deleteUserDialog)
|
|||
|
delete m_deleteUserDialog;
|
|||
|
delete ui;
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::initUserTableWidget()
|
|||
|
{
|
|||
|
ui->user_TableWidget->horizontalHeader()->setVisible(false);
|
|||
|
ui->user_TableWidget->verticalHeader()->setVisible(false);
|
|||
|
ui->user_TableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|||
|
ui->user_TableWidget->setAlternatingRowColors(true);
|
|||
|
ui->user_TableWidget->setPalette(QPalette(Qt::lightGray));
|
|||
|
ui->user_TableWidget->setColumnCount(3);
|
|||
|
ui->user_TableWidget->setRowCount(20);
|
|||
|
// ui->user_TableWidget->setGridStyle(Qt::NoPen);
|
|||
|
ui->user_TableWidget->setShowGrid(false);
|
|||
|
ui->user_TableWidget->setColumnWidth(0,140);
|
|||
|
ui->user_TableWidget->setColumnWidth(1,90);
|
|||
|
ui->user_TableWidget->setColumnWidth(2,240);
|
|||
|
|
|||
|
ui->user_TableWidget->setFont(QFont("黑体",15));
|
|||
|
|
|||
|
for(int i = 0;i < 20;i++)
|
|||
|
ui->user_TableWidget->setRowHeight(i,68);
|
|||
|
|
|||
|
//设置单行选中
|
|||
|
ui->user_TableWidget->setSelectionBehavior(QTableWidget::SelectRows);
|
|||
|
ui->user_TableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
|
|||
|
//设置表格所有单元格不可编辑
|
|||
|
ui->user_TableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|||
|
|
|||
|
connect(ui->user_TableWidget,&QTableWidget::cellClicked,[this](int row,int column){
|
|||
|
Q_UNUSED(column)
|
|||
|
//根据行列获取用户ID
|
|||
|
qDebug() <<"row colume m_currentRows"<<row<<column<<m_currentRows;
|
|||
|
if(row >= m_currentRows )
|
|||
|
{
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
//qDebug()<<"选择了ID"<<ui->user_TableWidget->item(row,2)->data(Qt::DisplayRole).toUInt();
|
|||
|
|
|||
|
m_currentUserId = ui->user_TableWidget->item(row,2)->data(Qt::DisplayRole).toUInt();
|
|||
|
emit signalCheckUserChanged(m_currentUserId);
|
|||
|
});
|
|||
|
|
|||
|
//UI显示问题待解决
|
|||
|
// ui->user_TableWidget->setFocusPolicy(Qt::NoFocus);
|
|||
|
ui->user_TableWidget->setStyleSheet("QTableWidget::item{outline:none;}"
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::updateUserTableWidget()
|
|||
|
{
|
|||
|
QString queryStr(QString("select * from PatientTable order by ID DESC"));
|
|||
|
|
|||
|
if(CDatabaseInterface::getInstance()->exec(queryStr))
|
|||
|
{
|
|||
|
int tempNum = CDatabaseInterface::getInstance()->getValuesSize();
|
|||
|
int fillTableNum = tempNum < 20 ? tempNum : 20;
|
|||
|
m_currentRows = fillTableNum;
|
|||
|
if(fillTableNum > 0)
|
|||
|
{
|
|||
|
QList<QVariantMap> valueMapList;
|
|||
|
valueMapList = CDatabaseInterface::getInstance()->getValues(0,fillTableNum);
|
|||
|
fillUserTable(valueMapList);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ui->user_TableWidget->clearContents();
|
|||
|
qDebug()<<"updateUserTableWidget()未查询到符合条件的数据";
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
qDebug()<<CDatabaseInterface::getInstance()->getLastError();
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::fillUserTable(const QList<QVariantMap> &ListMap)
|
|||
|
{
|
|||
|
ui->user_TableWidget->clearContents();
|
|||
|
wordList.clear();
|
|||
|
for(int row = 0;row < ListMap.size();++row)
|
|||
|
{
|
|||
|
ST_PatientMsg st_PatientMsg = variantMapToPatientMsg(ListMap.at(row));
|
|||
|
//更新自动补全表
|
|||
|
wordList.append(st_PatientMsg.name);
|
|||
|
wordList.append(QString::number(st_PatientMsg.ID));
|
|||
|
stringListModel.setStringList(wordList);
|
|||
|
//第0列
|
|||
|
/***
|
|||
|
QTableWidgetItem *checkItem = new QTableWidgetItem();
|
|||
|
ui->user_TableWidget->setItem(row,0,checkItem);
|
|||
|
QCheckBox *checkBox = new QCheckBox();
|
|||
|
checkBox->setFixedWidth(40);
|
|||
|
|
|||
|
checkBox->setLayoutDirection(Qt::RightToLeft);
|
|||
|
//使用该方法时必须先添加QTableWidgetItem
|
|||
|
ui->user_TableWidget->setCellWidget(row,0,checkBox);
|
|||
|
*****/
|
|||
|
//第0列 名字
|
|||
|
QTableWidgetItem *nameItem = new QTableWidgetItem(st_PatientMsg.name);
|
|||
|
// nameItem->setFlags(nameItem->flags() & (~Qt::ItemIsEditable)); //设置单个单元格不可编辑
|
|||
|
ui->user_TableWidget->setItem(row, 0, nameItem);
|
|||
|
//第1列 性别
|
|||
|
QString sexStr;
|
|||
|
E_LANGUAGE language = LanguageManager::getInstance()->getCurrentLanguage();
|
|||
|
qDebug() << "language"<<language;
|
|||
|
if(0 == st_PatientMsg.sex)
|
|||
|
{
|
|||
|
if(language == English_E)
|
|||
|
sexStr = tr("Male");
|
|||
|
else if(language == Chinese_E)
|
|||
|
sexStr = tr("男");
|
|||
|
}
|
|||
|
else if(1 == st_PatientMsg.sex)
|
|||
|
{
|
|||
|
if(language == English_E)
|
|||
|
sexStr = tr("Female");
|
|||
|
else if(language == Chinese_E)
|
|||
|
sexStr = tr("女");
|
|||
|
}
|
|||
|
QTableWidgetItem *sexItem = new QTableWidgetItem(sexStr);
|
|||
|
// nameItem->setFlags(nameItem->flags() & (~Qt::ItemIsEditable)); //设置单个单元格不可编辑
|
|||
|
ui->user_TableWidget->setItem(row, 1, sexItem);
|
|||
|
|
|||
|
//第2列 ID
|
|||
|
QTableWidgetItem *IdItem = new QTableWidgetItem(QString::number(st_PatientMsg.ID));
|
|||
|
ui->user_TableWidget->setItem(row, 2, IdItem);
|
|||
|
|
|||
|
// ui->user_TableWidget->cellWidget(row,0)->setGeometry(10,20,10,20);
|
|||
|
ui->user_TableWidget->item(row,0)->setTextAlignment(Qt::AlignCenter);
|
|||
|
ui->user_TableWidget->item(row,1)->setTextAlignment(Qt::AlignCenter);
|
|||
|
ui->user_TableWidget->item(row,2)->setTextAlignment(Qt::AlignCenter);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::setDefaultUser()
|
|||
|
{
|
|||
|
/***
|
|||
|
QString queryStr(QString("select * from PatientTable where ID = '%1'").arg(wordList.last().toInt()));
|
|||
|
|
|||
|
if(CDatabaseInterface::getInstance()->exec(queryStr))
|
|||
|
{
|
|||
|
if(CDatabaseInterface::getInstance()->getValuesSize() > 0)
|
|||
|
{
|
|||
|
QVariantMap userMap = CDatabaseInterface::getInstance()->getValues(0,1).at(0);
|
|||
|
ST_PatientMsg st_patientMsg = variantMapToPatientMsg(userMap);
|
|||
|
|
|||
|
//设置当前用户
|
|||
|
CurrentUserData::getInstace()->setCurrentUserMsg(st_patientMsg);
|
|||
|
}
|
|||
|
else
|
|||
|
QMessageBox::warning(NULL,tr("提示"),tr("未查到默认用户信息"));
|
|||
|
}
|
|||
|
***/
|
|||
|
ST_PatientMsg st_patientMsg;
|
|||
|
st_patientMsg.ID = 100000;
|
|||
|
st_patientMsg.name = "xyyl";
|
|||
|
CurrentUserData::getInstace()->setCurrentUserMsg(st_patientMsg);
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::on_searchUser_Btn_clicked()
|
|||
|
{
|
|||
|
//首先清理界面
|
|||
|
ui->user_TableWidget->clearContents();
|
|||
|
//检索的情况下不显示添加按钮,只显示符合检索条件的内容
|
|||
|
QString msg = ui->searchUser_LineEdit->text();
|
|||
|
QString query(QString("select * from PatientTable where name like '%1%' or id like '%2%'").arg(msg).arg(msg));
|
|||
|
|
|||
|
|
|||
|
QList<QVariantMap> valueMapList;
|
|||
|
valueMapList.clear();
|
|||
|
qDebug() <<"最开始用户数:"<<valueMapList.count();
|
|||
|
|
|||
|
if(CDatabaseInterface::getInstance()->exec(query))
|
|||
|
{
|
|||
|
valueMapList = CDatabaseInterface::getInstance()->getValues(0,8);
|
|||
|
qDebug()<<"name:"<<variantMapToPatientMsg(valueMapList.at(0)).ID;
|
|||
|
|
|||
|
}
|
|||
|
if(variantMapToPatientMsg(valueMapList.at(0)).ID == 0) //如果有查到为0的ID,直接清空
|
|||
|
valueMapList.clear();
|
|||
|
m_currentRows = valueMapList.count(); //此时要更新能选择的行,防止崩溃
|
|||
|
qDebug() <<"查询后用户数:"<<valueMapList.count();
|
|||
|
if(0 == valueMapList.count())//id = 0,sex=男,name=""
|
|||
|
{
|
|||
|
qDebug()<<"未找到合适数据";
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
qDebug() <<"查询后的用户数:"<<valueMapList.count();
|
|||
|
fillUserTable(valueMapList);
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::slotUpdateUserTable()
|
|||
|
{
|
|||
|
updateUserTableWidget();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void UserManager::on_newUser_Btn_clicked()
|
|||
|
{
|
|||
|
m_userDialog->setDialogTitle(E_NEW_USER);
|
|||
|
}
|
|||
|
|
|||
|
//选择用户
|
|||
|
void UserManager::on_selectUser_Btn_clicked()
|
|||
|
{
|
|||
|
QString queryStr(QString("select * from PatientTable where ID = '%1'").arg(m_currentUserId));
|
|||
|
|
|||
|
if(CDatabaseInterface::getInstance()->exec(queryStr))
|
|||
|
{
|
|||
|
if(CDatabaseInterface::getInstance()->getValuesSize() > 0)
|
|||
|
{
|
|||
|
QVariantMap userMap = CDatabaseInterface::getInstance()->getValues(0,1).at(0);
|
|||
|
ST_PatientMsg st_patientMsg = variantMapToPatientMsg(userMap);
|
|||
|
|
|||
|
m_slectUserDialog->setUserMsg(st_patientMsg);
|
|||
|
m_slectUserDialog->show();
|
|||
|
m_slectUserDialog->exec();
|
|||
|
//设置当前用户
|
|||
|
if(m_slectUserDialog->isSelectUser())
|
|||
|
CurrentUserData::getInstace()->setCurrentUserMsg(st_patientMsg);
|
|||
|
}
|
|||
|
else
|
|||
|
QMessageBox::warning(NULL,tr("提示"),tr("未查到该用户信息"));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void UserManager::on_EditUser_Btn_clicked()
|
|||
|
{
|
|||
|
QString queryStr(QString("select * from PatientTable where ID = '%1'").arg(m_currentUserId));
|
|||
|
|
|||
|
if(CDatabaseInterface::getInstance()->exec(queryStr))
|
|||
|
{
|
|||
|
if(CDatabaseInterface::getInstance()->getValuesSize() > 0)
|
|||
|
{
|
|||
|
QVariantMap userMap = CDatabaseInterface::getInstance()->getValues(0,1).at(0);
|
|||
|
//ST_PatientMsg st_patientMsg = variantMapToPatientMsg(userMap);
|
|||
|
|
|||
|
//m_slectUserDialog->setUserMsg(st_patientMsg);
|
|||
|
//m_slectUserDialog->show();
|
|||
|
//m_slectUserDialog->exec();
|
|||
|
//设置当前用户
|
|||
|
/*
|
|||
|
if(m_slectUserDialog->isSelectUser())
|
|||
|
CurrentUserData::getInstace()->setCurrentUserMsg(st_patientMsg);
|
|||
|
*/
|
|||
|
m_userDialog->setDialogTitle(E_EDIT_USER,m_currentUserId);
|
|||
|
}
|
|||
|
else
|
|||
|
QMessageBox::warning(NULL,tr("提示"),tr("未查到该用户信息"));
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void UserManager::on_deleteUser_Btn_clicked()
|
|||
|
{
|
|||
|
QString queryStr(QString("select * from PatientTable where ID = '%1'").arg(m_currentUserId));
|
|||
|
|
|||
|
if(CDatabaseInterface::getInstance()->exec(queryStr))
|
|||
|
{
|
|||
|
if(CDatabaseInterface::getInstance()->getValuesSize() > 0)
|
|||
|
{
|
|||
|
QVariantMap userMap = CDatabaseInterface::getInstance()->getValues(0,1).at(0);
|
|||
|
//ST_PatientMsg st_patientMsg = variantMapToPatientMsg(userMap);
|
|||
|
|
|||
|
//m_slectUserDialog->setUserMsg(st_patientMsg);
|
|||
|
//m_slectUserDialog->show();
|
|||
|
//m_slectUserDialog->exec();
|
|||
|
//设置当前用户
|
|||
|
/*
|
|||
|
if(m_slectUserDialog->isSelectUser())
|
|||
|
CurrentUserData::getInstace()->setCurrentUserMsg(st_patientMsg);
|
|||
|
*/
|
|||
|
//m_userDialog->setDialogTitle(E_EDIT_USER,m_currentUserId);
|
|||
|
m_deleteUserDialog->show();
|
|||
|
m_deleteUserDialog->exec();
|
|||
|
if(m_deleteUserDialog->isDeletedUser())
|
|||
|
{
|
|||
|
if(!CDatabaseInterface::getInstance()->deleteRowTable("PatientTable","ID",QString::number(m_currentUserId)))
|
|||
|
qDebug()<<"delete user failed"<<CDatabaseInterface::getInstance()->getLastError();
|
|||
|
updateUserTableWidget();
|
|||
|
}
|
|||
|
else
|
|||
|
return;
|
|||
|
}
|
|||
|
else
|
|||
|
QMessageBox::warning(NULL,tr("提示"),tr("未查到该用户信息"));
|
|||
|
}
|
|||
|
|
|||
|
/**********之前的删除方式,可以同时删除多个用户**********
|
|||
|
QList<int> deleteIndexList;
|
|||
|
int deleteUserNum = 0;
|
|||
|
for(int i = 0;i <m_currentRows;++i)
|
|||
|
{
|
|||
|
QCheckBox *checkBox = static_cast<QCheckBox*>(ui->user_TableWidget->cellWidget(i,0));
|
|||
|
|
|||
|
if(checkBox->isChecked())
|
|||
|
{
|
|||
|
QString ID = ui->user_TableWidget->item(i,2)->data(Qt::DisplayRole).toString();
|
|||
|
if(!CDatabaseInterface::getInstance()->deleteRowTable("PatientTable","ID",ID))
|
|||
|
qDebug()<<"delete user failed"<<CDatabaseInterface::getInstance()->getLastError();
|
|||
|
else
|
|||
|
++deleteUserNum;
|
|||
|
}
|
|||
|
}
|
|||
|
if(deleteUserNum > 0)
|
|||
|
QMessageBox::information(NULL,tr("提示"),tr("删除成功"));
|
|||
|
***************/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void UserManager::changeEvent(QEvent* event)
|
|||
|
{
|
|||
|
switch (event->type())
|
|||
|
{
|
|||
|
case QEvent::LanguageChange:
|
|||
|
updateUserTableWidget(); //刷新表
|
|||
|
ui->retranslateUi(this);
|
|||
|
break;
|
|||
|
default:
|
|||
|
QWidget::changeEvent(event);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void UserManager::showEvent(QShowEvent *event)
|
|||
|
{
|
|||
|
Q_UNUSED(event)
|
|||
|
ui->searchUser_LineEdit->clear();
|
|||
|
|
|||
|
//ui->trainRecordDestPage_LineEdit->clear(); //清空查询
|
|||
|
}
|