From 8b794417baa52b5ac0986203888650229123eb0d Mon Sep 17 00:00:00 2001 From: taynpg Date: Wed, 15 May 2024 13:17:24 +0800 Subject: [PATCH] =?UTF-8?q?rel=EF=BC=9A=E7=AC=AC=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=8F=AF=E7=94=A8=E7=89=88=E6=9C=AC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MainWidget.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++------- MainWidget.h | 5 ++++ src/xml_opr.cpp | 10 +++++++ src/xml_opr.h | 2 ++ 4 files changed, 76 insertions(+), 10 deletions(-) diff --git a/MainWidget.cpp b/MainWidget.cpp index caf5fa6..4f3166d 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -5,7 +5,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget { ui->setupUi(this); - setWindowTitle(u8"OneLevelXmlOpr v0.9"); + setWindowTitle(u8"OneLevelXmlOpr v1.0.0"); setWindowIcon(QIcon("://resource/xml.ico")); width_.push_back(280); @@ -13,8 +13,12 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget width_.push_back(160); } + ui->edStatus->setEnabled(false); + ui->btnSave->setEnabled(false); + connect(ui->btnRead, &QPushButton::clicked, this, [&]() { read(); }); connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(); }); + connect(ui->btnSave, &QPushButton::clicked, this, [&]() { save(); }); } MainWidget::~MainWidget() @@ -31,6 +35,8 @@ void MainWidget::set_work_exe(char* path) void MainWidget::generate_table_widget() { tab_widget_ = new QTableWidget(); + connect(tab_widget_, &QTableWidget::itemChanged, this, [&](QTableWidgetItem* item) { item_changed_handle(item); }); + auto config = ini_.get_config(); auto keys = splitString(config.purpose, ","); keys_.clear(); @@ -67,7 +73,7 @@ void MainWidget::push_content(const std::vector& eles) QTableWidgetItem* wgItem = new QTableWidgetItem(); if (i == 0) { - wgItem->setFlags(wgItem->flags() & ~Qt::ItemIsEditable); + wgItem->setFlags(wgItem->flags() & ~Qt::ItemIsEditable); } wgItem->setText(QString(data)); @@ -83,19 +89,26 @@ void MainWidget::read() } OprBase base = ini_.get_config(); if (!xml_.open(base.xml_path)) { - QString status = u8"Open【" + QString::fromStdString(base.xml_path.c_str()) + u8"】Failed."; + QString status = u8"Open【" + QString::fromStdString(base.xml_path.c_str()) + u8"】Failed."; return; } xml_.set_baseinfo(base); if (!xml_.parse_xml(vec_)) { - QString status = u8"parse_xml【" + QString::fromStdString(base.xml_path.c_str()) + u8"】Failed."; + QString status = u8"parse_xml【" + QString::fromStdString(base.xml_path.c_str()) + u8"】Failed."; return; } + + auto_add_ = true; generate_table_widget(); push_content(vec_); + current_ = vec_; + auto_add_ = false; - QString status = u8"Open And Parse【" + QString::fromLocal8Bit(base.xml_path.c_str()) + u8"】Success."; + QString status = u8"Open And Parse【" + QString::fromLocal8Bit(base.xml_path.c_str()) + u8"】Success."; ui->edStatus->setText(status); + + ui->btnRead->setEnabled(false); + ui->btnSave->setEnabled(true); } void MainWidget::search() @@ -104,17 +117,53 @@ void MainWidget::search() if (key.isEmpty()) { return; } - std::vector result{}; + if (tab_widget_ == nullptr) { + return; + } + current_.clear(); for (const auto& item : vec_) { for (auto i = 0; i < keys_.size(); ++i) { - const char* data = item->Attribute(keys_[i].c_str()); - QString qdata(data); + const char* data = item->Attribute(keys_[i].c_str()); + QString qdata(data); if (!qdata.contains(key)) { continue; } - result.push_back(item); + current_.push_back(item); break; } } - push_content(result); + push_content(current_); +} + +void MainWidget::item_changed_handle(QTableWidgetItem* item) +{ + if (auto_add_) { + return; + } + if (item == nullptr) { + return; + } + int row = item->row(); + int col = item->column(); + + QString xml_key = tab_widget_->item(row, 0)->text(); + for (const auto& ele : current_) { + const char* data = ele->Attribute(keys_[0].c_str()); + QString qdata(data); + if (qdata != xml_key) { + continue; + } + ele->SetAttribute(keys_[col].c_str(), item->text().toLocal8Bit().constData()); + break; + } +} + +void MainWidget::save() +{ + if (xml_.save()) { + QMessageBox::information(this, u8"提示", u8"保存成功"); + } + else { + QMessageBox::information(this, u8"提示", u8"保存失败"); + } } diff --git a/MainWidget.h b/MainWidget.h index 8e25ea3..39d99da 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -3,6 +3,7 @@ #include #include +#include #include "src/xml_opr.h" #include "src/config.h" @@ -28,6 +29,8 @@ public: private: void read(); void search(); + void item_changed_handle(QTableWidgetItem *item); + void save(); private: Ui::MainWidget* ui; ConfigIni ini_{}; @@ -35,7 +38,9 @@ private: std::string exe_path_{}; QTableWidget* tab_widget_{}; std::vector vec_{}; + std::vector current_{}; std::vector keys_{}; std::vector width_{}; + bool auto_add_{false}; }; #endif // MAINWIDGET_H diff --git a/src/xml_opr.cpp b/src/xml_opr.cpp index 3f31456..18bf458 100644 --- a/src/xml_opr.cpp +++ b/src/xml_opr.cpp @@ -8,6 +8,7 @@ bool CXmlOpr::open(const std::string &xml_path) if (doc_.LoadFile(xml_path.c_str()) != tinyxml2::XML_SUCCESS) { return false; } + xml_path_ = xml_path; return true; } @@ -45,3 +46,12 @@ bool CXmlOpr::parse_xml(std::vector& vec) } return true; } + +bool CXmlOpr::save() +{ + auto ret = doc_.SaveFile(xml_path_.c_str()); + if (ret != tinyxml2::XML_SUCCESS) { + return false; + } + return true; +} diff --git a/src/xml_opr.h b/src/xml_opr.h index 03232a2..c7a65c6 100644 --- a/src/xml_opr.h +++ b/src/xml_opr.h @@ -16,10 +16,12 @@ public: bool open(const std::string& xml_path); void set_baseinfo(const OprBase& base); bool parse_xml(std::vector& vec); + bool save(); private: tinyxml2::XMLDocument doc_{}; OprBase opr_base_{}; + std::string xml_path_{}; }; #endif \ No newline at end of file