diff --git a/MainWidget.cpp b/MainWidget.cpp index 9175383..b6f1ea9 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -16,7 +16,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget { ui->setupUi(this); - setWindowTitle(u8"OneLevelXmlOpr v1.2.14"); + setWindowTitle(u8"OneLevelXmlOpr v1.2.15"); setWindowIcon(QIcon("://resource/xml.ico")); QScreen* primaryScreen = QGuiApplication::primaryScreen(); @@ -26,11 +26,6 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget // setMinimumWidth(900); // setMinimumHeight(800); - width_.push_back(280); - for (int i = 0; i < 30; ++i) { - width_.push_back(160); - } - attri_edit_ = new CAttributeEdit(); ui->edStatus->setReadOnly(true); @@ -51,6 +46,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget return; } read(file); + //ui->edStatus->setText(file); }); connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(ui->edSearchKey->text()); }); connect(ui->btnBackup, &QPushButton::clicked, this, [&]() { backup_file(); }); @@ -115,6 +111,11 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget ini_.set_work_exe(exe_path_); base_ = ini_.get_config(); + + if (base_.blank_width > 20) { + blank_with_ = base_.blank_width; + } + ui->edStatus->setText(QString::fromStdString(base_.xml_path)); } @@ -180,6 +181,7 @@ void MainWidget::show_custom_menu() void MainWidget::generate_table_widget() { tab_widget_ = new QTableWidget(); + metrics_ = std::make_shared(tab_widget_->font()); tab_widget_->setContextMenuPolicy(Qt::CustomContextMenu); connect(tab_widget_, &QTableWidget::itemChanged, this, [&](QTableWidgetItem* item) { item_changed_handle(item); }); @@ -196,13 +198,18 @@ void MainWidget::generate_table_widget() list.append(QString::fromStdString(item)); } + col_with_.clear(); + for (auto i = 0; i < keys_.size(); ++i) { + col_with_[i] = 0; + } + tab_widget_->setColumnCount(list.size()); tab_widget_->setHorizontalHeaderLabels(list); tab_widget_->setSelectionBehavior(QAbstractItemView::SelectRows); // tab_widget_->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); for (auto i = 0; i < keys.size(); ++i) { - tab_widget_->setColumnWidth(i, width_[i]); + tab_widget_->setColumnWidth(i, col_with_[i]); } QHBoxLayout* lay = new QHBoxLayout(); @@ -251,6 +258,10 @@ void MainWidget::push_content(const std::vector& eles, st ui->edAllPage->setText(QString::number(all_page_)); judge_btn_page(); auto_add_ = false; + + for (auto i = 0; i < keys_.size(); ++i) { + tab_widget_->setColumnWidth(static_cast(i), col_with_[i]); + } } void MainWidget::judge_btn_page() @@ -271,7 +282,8 @@ void MainWidget::judge_btn_page() void MainWidget::read(const QString& file_path) { - if (!ini_.set_xml_path(file_path.toStdString())) { + base_.xml_path = file_path.toStdString(); + if (!ini_.set_xml_path(base_.xml_path)) { CUtil::msg(this, u8"没有ini配置文件或者保存ini失败。"); return; } @@ -287,6 +299,13 @@ void MainWidget::read(const QString& file_path) return; } + if (base_.allow_max_width < 0 || base_.allow_max_width > 1000) { + allow_max_with_ = 100; + } + else { + allow_max_with_ = base_.allow_max_width; + } + generate_table_widget(); push_content(vec_); current_ = vec_; @@ -496,6 +515,9 @@ void MainWidget::insert_one_line(Element_t* ele, int row) // wgItem->setCheckState(Qt::Checked); } QString sda(data); + int dwidth = metrics_->horizontalAdvance(sda) + blank_with_; + int need_set_width = dwidth > allow_max_with_ ? allow_max_with_ : dwidth; + col_with_[i] = col_with_[i] < need_set_width ? need_set_width : col_with_[i]; wgItem->setText(sda); tab_widget_->setItem(row, i, wgItem); } diff --git a/MainWidget.h b/MainWidget.h index 89607bf..3e23958 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "src/xml_opr.h" #include "src/config.h" #include "src/attribute_edit.h" @@ -30,6 +31,7 @@ class MainWidget; } QT_END_NAMESPACE +using ump_t = std::unordered_map; class MainWidget : public QWidget { Q_OBJECT @@ -78,6 +80,9 @@ private: Element_t* get_current_select_key(); QTableWidgetItem* get_current_select_item(); +private: + std::shared_ptr metrics_; + private: QMenu* menu_simple_{}; QMenu* menu_multi_{}; @@ -93,11 +98,13 @@ private: std::vector vec_{}; std::vector current_{}; std::vector keys_{}; - std::vector width_{}; bool auto_add_{false}; std::size_t cur_page_{1}; std::size_t all_page_{1}; CAttributeEdit* attri_edit_{}; OprBase base_{}; + long allow_max_with_{500}; + long blank_with_{50}; + ump_t col_with_{}; }; #endif // MAINWIDGET_H diff --git a/public_def.h b/public_def.h index eeb7a78..86074a1 100644 --- a/public_def.h +++ b/public_def.h @@ -10,6 +10,8 @@ struct OprBase { std::string the_node{}; std::string purpose{}; std::string xml_path{}; + long allow_max_width{500}; + long blank_width{50}; }; class CUtil diff --git a/src/config.cpp b/src/config.cpp index 727d7b9..cc155ae 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -47,5 +47,7 @@ bool ConfigIni::parse_ini() opr_base_.purpose = ini_.GetValue("Basic", "purpose"); opr_base_.the_node = ini_.GetValue("Basic", "the_node"); opr_base_.xml_path = ini_.GetValue("Basic", "xml_path"); + opr_base_.allow_max_width = ini_.GetLongValue("Basic", "max_col_width"); + opr_base_.blank_width = ini_.GetLongValue("Basic", "blank_width"); return true; }