func:添加导入导出数据(未完成)。

This commit is contained in:
2024-05-18 02:12:19 +08:00
parent 4976b5548e
commit a89ef1e677
7 changed files with 242 additions and 17 deletions

View File

@@ -3,6 +3,7 @@
#include <QSettings>
#include <QFile>
#include <QKeyEvent>
#include "src/data_edit.h"
#include "./ui_MainWidget.h"
constexpr std::size_t g_OnePage = 100;
@@ -28,6 +29,9 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
ui->btnSave->setEnabled(false);
ui->edAllPage->setEnabled(false);
ui->cbCaseSensitive->setChecked(false);
ui->btnRead->setFixedWidth(100);
ui->btnSave->setFixedWidth(100);
ui->btnExit->setFixedWidth(100);
connect(ui->btnSelectFile, &QPushButton::clicked, this, [&]() {
QString file = CUtil::select_file(this, u8"请选择xml文件", u8"XML(*.xml);;所有文件 (*)");
@@ -42,10 +46,21 @@ 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->btnExport, &QPushButton::clicked, this, &MainWidget::copy_multi_data);
connect(ui->btnPagePre, &QPushButton::clicked, this, [&]() {
unsigned int cur = ui->edCurPage->text().toUInt();
push_content(current_, cur - 1);
});
connect(ui->btnImport, &QPushButton::clicked, this, [&]() {
CDataEdit edit;
edit.is_import_ = true;
edit.exec();
if (edit.is_import_sucess_) {
CUtil::msg(this, u8"导入成功");
} else {
CUtil::msg(this, u8"导入失败");
}
});
connect(ui->btnPageNext, &QPushButton::clicked, this, [&]() {
unsigned int cur = ui->edCurPage->text().toUInt();
push_content(current_, cur + 1);
@@ -302,7 +317,7 @@ void MainWidget::item_changed_handle(QTableWidgetItem* item)
int col = item->column();
QString xml_key = tab_widget_->item(row, 0)->text();
Element_t* result = get_element_bykey(xml_key);
Element_t* result = get_element_by_key(xml_key);
if (result == nullptr) {
return;
}
@@ -329,7 +344,7 @@ void MainWidget::copy_select_line()
return;
}
Element_t* target = get_element_bykey(cur_item->text());
Element_t* target = get_element_by_key(cur_item->text());
if (target == nullptr) {
return;
}
@@ -423,7 +438,7 @@ void MainWidget::init_menu()
return;
}
Element_t* target = get_element_bykey(cur_item->text());
Element_t* target = get_element_by_key(cur_item->text());
if (target == nullptr) {
return;
}
@@ -463,7 +478,7 @@ void MainWidget::del_select_line()
if (item == nullptr) {
return;
}
Element_t* target = get_element_bykey(item->text());
Element_t* target = get_element_by_key(item->text());
if (target == nullptr) {
return;
}
@@ -489,7 +504,7 @@ Element_t* MainWidget::get_current_select_key()
if (item == nullptr) {
return ret;
}
ret = get_element_bykey(item->text());
ret = get_element_by_key(item->text());
return ret;
}
@@ -515,7 +530,7 @@ void MainWidget::reset()
push_content(current_);
}
tinyxml2::XMLElement* MainWidget::get_element_bykey(const QString& key)
tinyxml2::XMLElement* MainWidget::get_element_by_key(const QString& key)
{
Element_t* ret = nullptr;
for (const auto& ele : current_) {
@@ -530,6 +545,17 @@ tinyxml2::XMLElement* MainWidget::get_element_bykey(const QString& key)
return ret;
}
Element_t* MainWidget::get_element_by_row(int row)
{
Element_t* ret = nullptr;
if (row < 0 || !tab_widget_ || row >= tab_widget_->rowCount()) {
return ret;
}
QTableWidgetItem* item = tab_widget_->item(row, 0);
ret = get_element_by_key(item->text());
return ret;
}
void MainWidget::sort_by_repeat(std::vector<Element_t*>& vec)
{
struct SElement_t {
@@ -564,4 +590,30 @@ void MainWidget::sort_by_repeat(std::vector<Element_t*>& vec)
for (const auto& item : turn_vec) {
vec.push_back(item.ele);
}
}
}
void MainWidget::copy_multi_data()
{
if (tab_widget_ == nullptr) {
return;
}
QModelIndexList indexList = tab_widget_->selectionModel()->selectedRows();
if (indexList.size() < 1) {
CUtil::msg(this, u8"无选择数据");
return;
}
QString ret;
for (int i = 0; i < indexList.size(); ++i) {
Element_t* e = get_element_by_row(indexList[i].row());
if (e == nullptr) {
continue;
}
tinyxml2::XMLPrinter printer;
e->Accept(&printer);
ret.append(printer.CStr());
}
CDataEdit edit;
edit.set_data(ret);
edit.exec();
}