From a640f149f5b01ddd903880d05691d22bb747a638 Mon Sep 17 00:00:00 2001 From: taynpg Date: Wed, 15 May 2024 23:55:11 +0800 Subject: [PATCH] =?UTF-8?q?func=EF=BC=9A=E5=AE=8C=E6=88=90=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E4=B8=8E=E7=95=8C=E9=9D=A2=E7=9A=84=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MainWidget.cpp | 87 +++++++++++++++++++++++++++++++++++++++----------- MainWidget.h | 24 +++++++------- MainWidget.ui | 7 ++++ 3 files changed, 89 insertions(+), 29 deletions(-) diff --git a/MainWidget.cpp b/MainWidget.cpp index 702607e..7ad88ce 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -32,6 +32,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget connect(ui->btnSave, &QPushButton::clicked, this, [&]() { save(); }); connect(ui->btnCopySelectLine, &QPushButton::clicked, this, [&]() { copy_select_line(); }); connect(ui->btnDelSelectLine, &QPushButton::clicked, this, [&]() { del_select_line(); }); + connect(ui->btnExit, &QPushButton::clicked, this, [&]() { QApplication::exit(0); }); connect(ui->btnReset, &QPushButton::clicked, this, &MainWidget::reset); connect(ui->btnPagePre, &QPushButton::clicked, this, [&]() { unsigned int cur = ui->edCurPage->text().toUInt(); @@ -128,17 +129,7 @@ void MainWidget::push_content(const std::vector& eles, st for (auto p = (page - 1) * g_OnePage; p < all_size && p < max_show; ++p) { int row_cnt = tab_widget_->rowCount(); tab_widget_->insertRow(row_cnt); - for (auto i = 0; i < keys_.size(); ++i) { - const char* data = eles[p]->Attribute(keys_[i].c_str()); - QTableWidgetItem* wgItem = new QTableWidgetItem(); - - if (i == 0) { - wgItem->setFlags(wgItem->flags() & ~Qt::ItemIsEditable); - } - - wgItem->setText(QString(data)); - tab_widget_->setItem(row_cnt, i, wgItem); - } + insert_one_line(eles[p], row_cnt); } ui->edCurPage->setText(QString::number(page)); cur_page_ = page; @@ -197,6 +188,8 @@ void MainWidget::search() { QString key = ui->edSearchKey->text().trimmed(); if (key.isEmpty()) { + current_ = vec_; + push_content(current_); return; } if (tab_widget_ == nullptr) { @@ -250,7 +243,13 @@ void MainWidget::copy_select_line() if (!CUtil::affirm(this, u8"确认", u8"确认复制吗?")) { return; } - Element_t* target = get_current_select_key(); + + QTableWidgetItem* cur_item = get_current_select_item(); + if (cur_item == nullptr) { + return; + } + + Element_t* target = get_element_bykey(cur_item->text()); if (target == nullptr) { return; } @@ -270,7 +269,36 @@ void MainWidget::copy_select_line() xml_.key_value_to_element(newer, property); xml_.insert_brother_node(target, newer); - // TODO: 添加到界面 + tab_widget_->insertRow(cur_item->row() + 1); + insert_one_line(newer, cur_item->row() + 1); + + std::vector::iterator it; + for (it = vec_.begin(); it != vec_.end(); ++it) { + if (*it == target) { + break; + } + } + int df = it - vec_.begin() + 1; + vec_.insert(vec_.begin() + df, newer); + search(); +} + +void MainWidget::insert_one_line(Element_t* ele, int row) +{ + if (ele == nullptr) { + return; + } + for (auto i = 0; i < keys_.size(); ++i) { + const char* data = ele->Attribute(keys_[i].c_str()); + QTableWidgetItem* wgItem = new QTableWidgetItem(); + + if (i == 0) { + wgItem->setFlags(wgItem->flags() & ~Qt::ItemIsEditable); + } + + wgItem->setText(QString(data)); + tab_widget_->setItem(row, i, wgItem); + } } void MainWidget::del_select_line() @@ -278,18 +306,43 @@ void MainWidget::del_select_line() if (!CUtil::affirm(this, u8"确认", u8"确认删除吗?")) { return; } - Element_t* target = get_current_select_key(); + QTableWidgetItem* item = get_current_select_item(); + if (item == nullptr) { + return; + } + Element_t* target = get_element_bykey(item->text()); if (target == nullptr) { return; } xml_.del_element(target); // TODO: 添加到界面 + tab_widget_->removeRow(item->row()); + + std::vector::iterator it; + for (it = vec_.begin(); it != vec_.end(); ++it) { + if (*it == target) { + break; + } + } + vec_.erase(it); + search(); } Element_t* MainWidget::get_current_select_key() { - Element_t* ret = nullptr; + Element_t* ret = nullptr; + QTableWidgetItem* item = get_current_select_item(); + if (item == nullptr) { + return ret; + } + ret = get_element_bykey(item->text()); + return ret; +} + +QTableWidgetItem* MainWidget::get_current_select_item() +{ + QTableWidgetItem* ret = nullptr; if (tab_widget_ == nullptr) { return ret; } @@ -298,9 +351,7 @@ Element_t* MainWidget::get_current_select_key() CUtil::msg(this, u8"没有选中数据"); return ret; } - QTableWidgetItem* item = selectedItems[0]; - int row = item->row(); - ret = get_element_bykey(item->text()); + ret = selectedItems[0]; return ret; } diff --git a/MainWidget.h b/MainWidget.h index 30fcfc3..b263417 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -28,19 +28,21 @@ public: void push_content(const std::vector& eles, std::size_t page = 1); private: - void read(); - void search(); - void item_changed_handle(QTableWidgetItem* item); - void save(); - void copy_select_line(); - void del_select_line(); - Element_t* get_current_select_key(); - void reset(); - void judge_btn_page(); - void copy_key(); + void read(); + void search(); + void item_changed_handle(QTableWidgetItem* item); + void save(); + void copy_select_line(); + void insert_one_line(Element_t* ele, int row); + void del_select_line(); + void reset(); + void judge_btn_page(); + void copy_key(); private: - Element_t* get_element_bykey(const QString& key); + Element_t* get_element_bykey(const QString& key); + Element_t* get_current_select_key(); + QTableWidgetItem* get_current_select_item(); private: Ui::MainWidget* ui; diff --git a/MainWidget.ui b/MainWidget.ui index 4b0686b..61554f4 100644 --- a/MainWidget.ui +++ b/MainWidget.ui @@ -148,6 +148,13 @@ + + + + 退出 + + +