func:完成增删与界面的匹配。

This commit is contained in:
taynpg 2024-05-15 23:55:11 +08:00
parent 41713baede
commit a640f149f5
3 changed files with 89 additions and 29 deletions

View File

@ -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<tinyxml2::XMLElement*>& 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<Element_t*>::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<Element_t*>::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;
}

View File

@ -28,19 +28,21 @@ public:
void push_content(const std::vector<Element_t*>& 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;

View File

@ -148,6 +148,13 @@
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="btnExit">
<property name="text">
<string>退出</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">