opti:设置自动设置列宽度,并且可以配置允许的最大宽度。

This commit is contained in:
taynpg 2024-05-24 10:03:58 +08:00
parent 3d1fcc5dc8
commit 5761a7ff48
4 changed files with 42 additions and 9 deletions

View File

@ -16,7 +16,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
{ {
ui->setupUi(this); ui->setupUi(this);
setWindowTitle(u8"OneLevelXmlOpr v1.2.14"); setWindowTitle(u8"OneLevelXmlOpr v1.2.15");
setWindowIcon(QIcon("://resource/xml.ico")); setWindowIcon(QIcon("://resource/xml.ico"));
QScreen* primaryScreen = QGuiApplication::primaryScreen(); QScreen* primaryScreen = QGuiApplication::primaryScreen();
@ -26,11 +26,6 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
// setMinimumWidth(900); // setMinimumWidth(900);
// setMinimumHeight(800); // setMinimumHeight(800);
width_.push_back(280);
for (int i = 0; i < 30; ++i) {
width_.push_back(160);
}
attri_edit_ = new CAttributeEdit(); attri_edit_ = new CAttributeEdit();
ui->edStatus->setReadOnly(true); ui->edStatus->setReadOnly(true);
@ -51,6 +46,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
return; return;
} }
read(file); read(file);
//ui->edStatus->setText(file);
}); });
connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(ui->edSearchKey->text()); }); connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(ui->edSearchKey->text()); });
connect(ui->btnBackup, &QPushButton::clicked, this, [&]() { backup_file(); }); 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_); ini_.set_work_exe(exe_path_);
base_ = ini_.get_config(); base_ = ini_.get_config();
if (base_.blank_width > 20) {
blank_with_ = base_.blank_width;
}
ui->edStatus->setText(QString::fromStdString(base_.xml_path)); ui->edStatus->setText(QString::fromStdString(base_.xml_path));
} }
@ -180,6 +181,7 @@ void MainWidget::show_custom_menu()
void MainWidget::generate_table_widget() void MainWidget::generate_table_widget()
{ {
tab_widget_ = new QTableWidget(); tab_widget_ = new QTableWidget();
metrics_ = std::make_shared<QFontMetrics>(tab_widget_->font());
tab_widget_->setContextMenuPolicy(Qt::CustomContextMenu); tab_widget_->setContextMenuPolicy(Qt::CustomContextMenu);
connect(tab_widget_, &QTableWidget::itemChanged, this, connect(tab_widget_, &QTableWidget::itemChanged, this,
[&](QTableWidgetItem* item) { item_changed_handle(item); }); [&](QTableWidgetItem* item) { item_changed_handle(item); });
@ -196,13 +198,18 @@ void MainWidget::generate_table_widget()
list.append(QString::fromStdString(item)); 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_->setColumnCount(list.size());
tab_widget_->setHorizontalHeaderLabels(list); tab_widget_->setHorizontalHeaderLabels(list);
tab_widget_->setSelectionBehavior(QAbstractItemView::SelectRows); tab_widget_->setSelectionBehavior(QAbstractItemView::SelectRows);
// tab_widget_->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // tab_widget_->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
for (auto i = 0; i < keys.size(); ++i) { 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(); QHBoxLayout* lay = new QHBoxLayout();
@ -251,6 +258,10 @@ void MainWidget::push_content(const std::vector<tinyxml2::XMLElement*>& eles, st
ui->edAllPage->setText(QString::number(all_page_)); ui->edAllPage->setText(QString::number(all_page_));
judge_btn_page(); judge_btn_page();
auto_add_ = false; auto_add_ = false;
for (auto i = 0; i < keys_.size(); ++i) {
tab_widget_->setColumnWidth(static_cast<int>(i), col_with_[i]);
}
} }
void MainWidget::judge_btn_page() void MainWidget::judge_btn_page()
@ -271,7 +282,8 @@ void MainWidget::judge_btn_page()
void MainWidget::read(const QString& file_path) 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失败。"); CUtil::msg(this, u8"没有ini配置文件或者保存ini失败。");
return; return;
} }
@ -287,6 +299,13 @@ void MainWidget::read(const QString& file_path)
return; 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(); generate_table_widget();
push_content(vec_); push_content(vec_);
current_ = vec_; current_ = vec_;
@ -496,6 +515,9 @@ void MainWidget::insert_one_line(Element_t* ele, int row)
// wgItem->setCheckState(Qt::Checked); // wgItem->setCheckState(Qt::Checked);
} }
QString sda(data); 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); wgItem->setText(sda);
tab_widget_->setItem(row, i, wgItem); tab_widget_->setItem(row, i, wgItem);
} }

View File

@ -6,6 +6,7 @@
#include <QMenu> #include <QMenu>
#include <QAction> #include <QAction>
#include <QMessageBox> #include <QMessageBox>
#include <unordered_map>
#include "src/xml_opr.h" #include "src/xml_opr.h"
#include "src/config.h" #include "src/config.h"
#include "src/attribute_edit.h" #include "src/attribute_edit.h"
@ -30,6 +31,7 @@ class MainWidget;
} }
QT_END_NAMESPACE QT_END_NAMESPACE
using ump_t = std::unordered_map<int, int>;
class MainWidget : public QWidget class MainWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -78,6 +80,9 @@ private:
Element_t* get_current_select_key(); Element_t* get_current_select_key();
QTableWidgetItem* get_current_select_item(); QTableWidgetItem* get_current_select_item();
private:
std::shared_ptr<QFontMetrics> metrics_;
private: private:
QMenu* menu_simple_{}; QMenu* menu_simple_{};
QMenu* menu_multi_{}; QMenu* menu_multi_{};
@ -93,11 +98,13 @@ private:
std::vector<Element_t*> vec_{}; std::vector<Element_t*> vec_{};
std::vector<Element_t*> current_{}; std::vector<Element_t*> current_{};
std::vector<std::string> keys_{}; std::vector<std::string> keys_{};
std::vector<int> width_{};
bool auto_add_{false}; bool auto_add_{false};
std::size_t cur_page_{1}; std::size_t cur_page_{1};
std::size_t all_page_{1}; std::size_t all_page_{1};
CAttributeEdit* attri_edit_{}; CAttributeEdit* attri_edit_{};
OprBase base_{}; OprBase base_{};
long allow_max_with_{500};
long blank_with_{50};
ump_t col_with_{};
}; };
#endif // MAINWIDGET_H #endif // MAINWIDGET_H

View File

@ -10,6 +10,8 @@ struct OprBase {
std::string the_node{}; std::string the_node{};
std::string purpose{}; std::string purpose{};
std::string xml_path{}; std::string xml_path{};
long allow_max_width{500};
long blank_width{50};
}; };
class CUtil class CUtil

View File

@ -47,5 +47,7 @@ bool ConfigIni::parse_ini()
opr_base_.purpose = ini_.GetValue("Basic", "purpose"); opr_base_.purpose = ini_.GetValue("Basic", "purpose");
opr_base_.the_node = ini_.GetValue("Basic", "the_node"); opr_base_.the_node = ini_.GetValue("Basic", "the_node");
opr_base_.xml_path = ini_.GetValue("Basic", "xml_path"); 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; return true;
} }