opti:优化替换范围,添加正则替换功能。

This commit is contained in:
2024-05-20 00:32:26 +08:00
parent 43c2d8680d
commit aa6481cea4
4 changed files with 69 additions and 39 deletions

View File

@@ -4,6 +4,7 @@
#include <QFile>
#include <QKeyEvent>
#include <QDateTime>
#include <QRegularExpression>
#include <filesystem>
#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<Element_t*> 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());
}
}