410 lines
14 KiB
C++
Raw Normal View History

2024-11-25 17:15:44 +08:00
#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(); //清空查询
}