#include "MainWidget.h" #include "./ui_MainWidget.h" MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget) { ui->setupUi(this); setWindowTitle(u8"OneLevelXmlOpr v0.9"); setWindowIcon(QIcon("://resource/xml.ico")); width_.push_back(280); for (int i = 0; i < 30; ++i) { width_.push_back(160); } connect(ui->btnRead, &QPushButton::clicked, this, [&]() { read(); }); connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(); }); } MainWidget::~MainWidget() { delete ui; } void MainWidget::set_work_exe(char* path) { exe_path_.clear(); exe_path_.append(path); } void MainWidget::generate_table_widget() { tab_widget_ = new QTableWidget(); auto config = ini_.get_config(); auto keys = splitString(config.purpose, ","); keys_.clear(); QStringList list; for (const auto& item : keys) { if (item.empty()) { continue; } keys_.push_back(item); list.append(QString::fromStdString(item)); } tab_widget_->setColumnCount(list.size()); tab_widget_->setHorizontalHeaderLabels(list); for (auto i = 0; i < keys.size(); ++i) { tab_widget_->setColumnWidth(i, width_[i]); } QHBoxLayout* lay = new QHBoxLayout(); lay->addWidget(tab_widget_); ui->widget->setLayout(lay); } void MainWidget::push_content(const std::vector& eles) { tab_widget_->clearContents(); tab_widget_->setRowCount(0); for (const auto& ele : eles) { int row_cnt = tab_widget_->rowCount(); tab_widget_->insertRow(row_cnt); 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_cnt, i, wgItem); } } } void MainWidget::read() { if (!ini_.set_work_exe(exe_path_)) { return; } OprBase base = ini_.get_config(); if (!xml_.open(base.xml_path)) { QString status = u8"Open【" + QString::fromStdString(base.xml_path.c_str()) + u8"】Failed."; return; } xml_.set_baseinfo(base); if (!xml_.parse_xml(vec_)) { QString status = u8"parse_xml【" + QString::fromStdString(base.xml_path.c_str()) + u8"】Failed."; return; } generate_table_widget(); push_content(vec_); QString status = u8"Open And Parse【" + QString::fromLocal8Bit(base.xml_path.c_str()) + u8"】Success."; ui->edStatus->setText(status); } void MainWidget::search() { QString key = ui->edSearchKey->text().trimmed(); if (key.isEmpty()) { return; } std::vector result{}; for (const auto& item : vec_) { for (auto i = 0; i < keys_.size(); ++i) { const char* data = item->Attribute(keys_[i].c_str()); QString qdata(data); if (!qdata.contains(key)) { continue; } result.push_back(item); break; } } push_content(result); }