From aa6481cea43d610d721231ab153a546faa83c0cd Mon Sep 17 00:00:00 2001 From: taynpg Date: Mon, 20 May 2024 00:32:26 +0800 Subject: [PATCH] =?UTF-8?q?opti=EF=BC=9A=E4=BC=98=E5=8C=96=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E8=8C=83=E5=9B=B4=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=AD=A3?= =?UTF-8?q?=E5=88=99=E6=9B=BF=E6=8D=A2=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 4 +++- MainWidget.cpp | 56 ++++++++++++++++++++++++++++++------------- MainWidget.h | 3 ++- MainWidget.ui | 45 ++++++++++++++++++---------------- 4 files changed, 69 insertions(+), 39 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 42ea91c..a5cfbda 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -100,6 +100,8 @@ "qmenu": "cpp", "qmessagebox": "cpp", "qaction": "cpp", - "codecvt": "cpp" + "codecvt": "cpp", + "qregexp": "cpp", + "qregularexpression": "cpp" } } \ No newline at end of file diff --git a/MainWidget.cpp b/MainWidget.cpp index 3b3e541..cf4c774 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "src/data_edit.h" #include "./ui_MainWidget.h" @@ -52,7 +53,8 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget connect(ui->btnSave, &QPushButton::clicked, this, [&]() { save(); }); connect(ui->btnExit, &QPushButton::clicked, this, [&]() { QApplication::exit(0); }); connect(ui->btnReset, &QPushButton::clicked, this, &MainWidget::reset); - connect(ui->btnReplace, &QPushButton::clicked, this, &MainWidget::replace_content); + connect(ui->btnReplace, &QPushButton::clicked, this, [&]() { replace_content(true); }); + connect(ui->btnRxReplace, &QPushButton::clicked, this, [&]() { replace_content(false); }); connect(ui->btnExport, &QPushButton::clicked, this, &MainWidget::copy_multi_data); connect(ui->btnPagePre, &QPushButton::clicked, this, [&]() { unsigned int cur = ui->edCurPage->text().toUInt(); @@ -81,6 +83,9 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget push_content(current_, cur); }); connect(ui->btnResort, &QPushButton::clicked, this, [&]() { + if (tab_widget_ == nullptr) { + return; + } sort_by_repeat(vec_); std::vector nvec{}; xml_.copy_and_del(vec_, nvec); @@ -631,7 +636,7 @@ void MainWidget::copy_multi_data() edit.exec(); } -void MainWidget::replace_content() +void MainWidget::replace_content(bool is_common) { if (tab_widget_ == nullptr) { return; @@ -654,7 +659,11 @@ void MainWidget::replace_content() if (e == nullptr) { continue; } - replace_str(key, after, e); + if (is_common) { + replace_str(key, after, e); + } else { + replace_str(e, key, after); + } ele_update_gui(e, indexList[i].row()); } } else if (ui->rbRepCurPage->isChecked()) { @@ -664,24 +673,24 @@ void MainWidget::replace_content() if (e == nullptr) { continue; } - replace_str(key, after, e); + if (is_common) { + replace_str(key, after, e); + } else { + replace_str(e, key, after); + } ele_update_gui(e, i); } } else { if (!CUtil::affirm(this, u8"确认", u8"确认进行全局替换吗?")) { return; } - for (auto& data : vec_) { - auto* element = data->FirstAttribute(); - while (element) { - QString content(element->Value()); - content.replace(key, after); - data->SetAttribute(element->Name(), content.toStdString().c_str()); - element = element->Next(); + if (is_common) { + replace_str(key, after, data); + } else { + replace_str(data, key, after); } } - xml_.get_all_elements(vec_); current_.clear(); current_ = vec_; @@ -694,14 +703,27 @@ void MainWidget::replace_str(const QString& pre, const QString& after, Element_t if (ele == nullptr) { return; } - auto* element = ele->FirstAttribute(); - while (element) { - QString content(element->Value()); + for (auto i = 0; i < keys_.size(); ++i) { + auto* value = ele->Attribute(keys_[i].c_str()); + QString content(value); if (content.contains(pre)) { content.replace(pre, after); - ele->SetAttribute(element->Name(), content.toStdString().c_str()); + ele->SetAttribute(keys_[i].c_str(), content.toStdString().c_str()); } - element = element->Next(); + } +} + +void MainWidget::replace_str(Element_t* ele, const QString& rg, const QString& after) +{ + QRegularExpression rx(rg); + if (ele == nullptr) { + return; + } + for (auto i = 0; i < keys_.size(); ++i) { + auto* value = ele->Attribute(keys_[i].c_str()); + QString content(value); + content.replace(rx, after); + ele->SetAttribute(keys_[i].c_str(), content.toStdString().c_str()); } } diff --git a/MainWidget.h b/MainWidget.h index 9a2c2c5..558da2d 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -46,13 +46,14 @@ private: void show_custom_menu(); void sort_by_repeat(std::vector& vec); void copy_multi_data(); - void replace_content(); + void replace_content(bool is_common = true); void backup_file(); protected: void closeEvent(QCloseEvent* event); void keyPressEvent(QKeyEvent* event); void replace_str(const QString& pre, const QString& after, Element_t* ele); + void replace_str(Element_t* ele, const QString& rg, const QString& after); private: Element_t* get_element_by_key(const QString& key); Element_t* get_element_by_row(int row); diff --git a/MainWidget.ui b/MainWidget.ui index 6e9aa9f..1b4af85 100644 --- a/MainWidget.ui +++ b/MainWidget.ui @@ -37,6 +37,20 @@ + + + + 备份 + + + + + + + 重排序 + + + @@ -56,21 +70,14 @@ - 导出选择行 + 导出 - 导入行 - - - - - - - 备份快照 + 导入 @@ -108,7 +115,14 @@ - 替换为 + 一般替换 + + + + + + + 正则替换 @@ -125,7 +139,7 @@ - 搜索区分大小写 + 区分大小写 @@ -153,13 +167,6 @@ - - - - 重新排序 - - - @@ -282,7 +289,6 @@ btnSave btnExport btnImport - btnBackup edRepPre edRepAfter btnReplace @@ -290,7 +296,6 @@ edSearchKey btnSearch btnReset - btnResort btnExit edCurPage edAllPage