opti:优化替换范围,添加正则替换功能。
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user