diff --git a/.vscode/settings.json b/.vscode/settings.json index 84e67bf..42ea91c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -99,6 +99,7 @@ "qtablewidget": "cpp", "qmenu": "cpp", "qmessagebox": "cpp", - "qaction": "cpp" + "qaction": "cpp", + "codecvt": "cpp" } } \ No newline at end of file diff --git a/MainWidget.cpp b/MainWidget.cpp index 090b64a..3b3e541 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -34,7 +34,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget ui->btnImport->setEnabled(false); ui->btnExport->setEnabled(false); ui->btnBackup->setEnabled(false); - ui->cbRepOnlySelect->setChecked(true); + ui->rbReplaceSelect->setChecked(true); ui->btnRead->setFixedWidth(100); ui->btnSave->setFixedWidth(100); ui->btnExit->setFixedWidth(100); @@ -642,7 +642,7 @@ void MainWidget::replace_content() CUtil::msg(this, u8"替换前数据为空。"); return; } - if (ui->cbRepOnlySelect->isChecked()) { + if (ui->rbReplaceSelect->isChecked()) { QModelIndexList indexList = tab_widget_->selectionModel()->selectedRows(); if (indexList.size() < 1) { CUtil::msg(this, u8"无选择数据"); @@ -654,15 +654,18 @@ void MainWidget::replace_content() if (e == nullptr) { continue; } - auto* element = e->FirstAttribute(); - while (element) { - QString content(element->Value()); - if (content.contains(key)) { - content.replace(key, after); - e->SetAttribute(element->Name(), content.toStdString().c_str()); - } - element = element->Next(); + replace_str(key, after, e); + ele_update_gui(e, indexList[i].row()); + } + } else if (ui->rbRepCurPage->isChecked()) { + int row_count = tab_widget_->rowCount(); + for (int i = 0; i < row_count; ++i) { + Element_t* e = get_element_by_row(i); + if (e == nullptr) { + continue; } + replace_str(key, after, e); + ele_update_gui(e, i); } } else { if (!CUtil::affirm(this, u8"确认", u8"确认进行全局替换吗?")) { @@ -678,12 +681,28 @@ void MainWidget::replace_content() element = element->Next(); } } - } - xml_.get_all_elements(vec_); - current_.clear(); - current_ = vec_; - push_content(current_); + xml_.get_all_elements(vec_); + current_.clear(); + current_ = vec_; + search(); + } +} + +void MainWidget::replace_str(const QString& pre, const QString& after, Element_t* ele) +{ + if (ele == nullptr) { + return; + } + auto* element = ele->FirstAttribute(); + while (element) { + QString content(element->Value()); + if (content.contains(pre)) { + content.replace(pre, after); + ele->SetAttribute(element->Name(), content.toStdString().c_str()); + } + element = element->Next(); + } } void MainWidget::backup_file() @@ -695,8 +714,7 @@ void MainWidget::backup_file() QString time = QDateTime::currentDateTime().toString("yyyy-MMdd-hhmmss"); if (!xml_.backup_file(fs::path(exe_path_).parent_path().append("backup").string(), time.toStdString())) { CUtil::msg(this, u8"备份失败。"); - } - else { + } else { CUtil::msg(this, u8"备份完成。"); } } diff --git a/MainWidget.h b/MainWidget.h index 154a30c..9a2c2c5 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -52,7 +52,7 @@ private: protected: void closeEvent(QCloseEvent* event); void keyPressEvent(QKeyEvent* event); - + void replace_str(const QString& pre, const QString& after, Element_t* ele); 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 1ff5256..6e9aa9f 100644 --- a/MainWidget.ui +++ b/MainWidget.ui @@ -6,7 +6,7 @@ 0 0 - 1211 + 1220 805 @@ -82,9 +82,23 @@ - + - 仅替换所选 + 所选 + + + + + + + 当前页 + + + + + + + 全局 @@ -269,7 +283,6 @@ btnExport btnImport btnBackup - cbRepOnlySelect edRepPre edRepAfter btnReplace