func:实现了排序功能。
This commit is contained in:
@@ -11,7 +11,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle(u8"OneLevelXmlOpr v1.2.7");
|
||||
setWindowTitle(u8"OneLevelXmlOpr v1.2.8");
|
||||
setWindowIcon(QIcon("://resource/xml.ico"));
|
||||
|
||||
setMinimumWidth(900);
|
||||
@@ -37,7 +37,8 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
|
||||
read(file);
|
||||
});
|
||||
connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(); });
|
||||
connect(ui->btnRead, &QPushButton::clicked, this, [&]() { read(ui->edStatus->text().trimmed()); });
|
||||
connect(ui->btnRead, &QPushButton::clicked, this,
|
||||
[&]() { read(ui->edStatus->text().trimmed()); });
|
||||
connect(ui->btnSave, &QPushButton::clicked, this, [&]() { save(); });
|
||||
connect(ui->btnExit, &QPushButton::clicked, this, [&]() { QApplication::exit(0); });
|
||||
connect(ui->btnReset, &QPushButton::clicked, this, &MainWidget::reset);
|
||||
@@ -53,13 +54,22 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
|
||||
unsigned int cur = ui->edCurPage->text().toUInt();
|
||||
push_content(current_, cur);
|
||||
});
|
||||
connect(ui->btnResort, &QPushButton::clicked, this, [&]() {
|
||||
sort_by_repeat(vec_);
|
||||
std::vector<Element_t*> nvec{};
|
||||
xml_.copy_and_del(vec_, nvec);
|
||||
vec_.clear();
|
||||
std::swap(vec_, nvec);
|
||||
current_ = vec_;
|
||||
push_content(current_);
|
||||
});
|
||||
|
||||
QSettings settings;
|
||||
settings.beginGroup("xmlopr");
|
||||
restoreGeometry(settings.value("geometry").toByteArray());
|
||||
settings.endGroup();
|
||||
|
||||
//QFile qss_file("://qss/lightblue.css");
|
||||
// QFile qss_file("://qss/lightblue.css");
|
||||
QFile qss_file("://qss/flatgray.css");
|
||||
if (qss_file.open(QFile::ReadOnly)) {
|
||||
qApp->setStyleSheet(qss_file.readAll());
|
||||
@@ -132,8 +142,10 @@ void MainWidget::generate_table_widget()
|
||||
{
|
||||
tab_widget_ = new QTableWidget();
|
||||
tab_widget_->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(tab_widget_, &QTableWidget::itemChanged, this, [&](QTableWidgetItem* item) { item_changed_handle(item); });
|
||||
connect(tab_widget_, &QTableWidget::customContextMenuRequested, this, &MainWidget::show_custom_menu);
|
||||
connect(tab_widget_, &QTableWidget::itemChanged, this,
|
||||
[&](QTableWidgetItem* item) { item_changed_handle(item); });
|
||||
connect(tab_widget_, &QTableWidget::customContextMenuRequested, this,
|
||||
&MainWidget::show_custom_menu);
|
||||
auto config = ini_.get_config();
|
||||
auto keys = splitString(config.purpose, ",");
|
||||
keys_.clear();
|
||||
@@ -149,7 +161,7 @@ void MainWidget::generate_table_widget()
|
||||
tab_widget_->setColumnCount(list.size());
|
||||
tab_widget_->setHorizontalHeaderLabels(list);
|
||||
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) {
|
||||
tab_widget_->setColumnWidth(i, width_[i]);
|
||||
@@ -433,8 +445,8 @@ void MainWidget::insert_one_line(Element_t* ele, int row)
|
||||
|
||||
if (i == 0) {
|
||||
wgItem->setFlags(wgItem->flags() & ~Qt::ItemIsEditable);
|
||||
//wgItem->setFlags(wgItem->flags() | Qt::ItemIsUserCheckable);
|
||||
//wgItem->setCheckState(Qt::Checked);
|
||||
// wgItem->setFlags(wgItem->flags() | Qt::ItemIsUserCheckable);
|
||||
// wgItem->setCheckState(Qt::Checked);
|
||||
}
|
||||
|
||||
wgItem->setText(QString(data));
|
||||
@@ -517,3 +529,39 @@ tinyxml2::XMLElement* MainWidget::get_element_bykey(const QString& key)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void MainWidget::sort_by_repeat(std::vector<Element_t*>& vec)
|
||||
{
|
||||
struct SElement_t {
|
||||
SElement_t(Element_t* e, std::string& s)
|
||||
{
|
||||
ele = e;
|
||||
str = std::move(s);
|
||||
}
|
||||
Element_t* ele{};
|
||||
std::string str{};
|
||||
};
|
||||
std::vector<SElement_t> turn_vec{};
|
||||
for (const auto& item : vec) {
|
||||
const char* str = item->Attribute(keys_[0].c_str());
|
||||
turn_vec.emplace_back(item, std::string(str));
|
||||
}
|
||||
|
||||
auto compare = [&](const SElement_t& se1, const SElement_t& se2) {
|
||||
std::size_t i = 0;
|
||||
// 逐个字符比较,直到找到不同的字符或者某个字符串到达结尾
|
||||
while (i < se1.str.length() && i < se2.str.length()) {
|
||||
if (se1.str[i] != se2.str[i]) {
|
||||
return se1.str[i] < se2.str[i];
|
||||
}
|
||||
++i;
|
||||
}
|
||||
// 如果有一个字符串到达结尾,而另一个还没有,则较短的字符串排在前面
|
||||
return se1.str.length() < se2.str.length();
|
||||
};
|
||||
std::sort(turn_vec.begin(), turn_vec.end(), compare);
|
||||
vec.clear();
|
||||
for (const auto& item : turn_vec) {
|
||||
vec.push_back(item.ele);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user