#include "usermanager.h" #include "ui_usermanager.h" #include "cdatabaseinterface.h" #include "dbforrmate.h" #include #include #include #include "currentuserdata.h" #include "selectuserdialog.h" #include "deleteuserdialog.h" #include #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"<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"<= m_currentRows ) { return; } //qDebug()<<"选择了ID"<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 valueMapList; valueMapList = CDatabaseInterface::getInstance()->getValues(0,fillTableNum); fillUserTable(valueMapList); } else { ui->user_TableWidget->clearContents(); qDebug()<<"updateUserTableWidget()未查询到符合条件的数据"; } } else qDebug()<getLastError(); } void UserManager::fillUserTable(const QList &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"<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 valueMapList; valueMapList.clear(); qDebug() <<"最开始用户数:"<exec(query)) { valueMapList = CDatabaseInterface::getInstance()->getValues(0,8); qDebug()<<"name:"<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"<getLastError(); updateUserTableWidget(); } else return; } else QMessageBox::warning(NULL,tr("提示"),tr("未查到该用户信息")); } /**********之前的删除方式,可以同时删除多个用户********** QList deleteIndexList; int deleteUserNum = 0; for(int i = 0;i (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"<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(); //清空查询 }