diff --git a/.vscode/settings.json b/.vscode/settings.json index 9a4d1bf..84e67bf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -96,6 +96,9 @@ "xtr1common": "cpp", "xtree": "cpp", "xutility": "cpp", - "qtablewidget": "cpp" + "qtablewidget": "cpp", + "qmenu": "cpp", + "qmessagebox": "cpp", + "qaction": "cpp" } } \ No newline at end of file diff --git a/MainWidget.cpp b/MainWidget.cpp index adfa186..7f1304e 100644 --- a/MainWidget.cpp +++ b/MainWidget.cpp @@ -11,7 +11,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget { ui->setupUi(this); - setWindowTitle(u8"OneLevelXmlOpr v1.2.3"); + setWindowTitle(u8"OneLevelXmlOpr v1.2.4"); setWindowIcon(QIcon("://resource/xml.ico")); setMinimumWidth(900); @@ -26,22 +26,14 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget ui->edStatus->setEnabled(false); ui->btnSave->setEnabled(false); - ui->btnCopySelectLine->setEnabled(false); - ui->btnDelSelectLine->setEnabled(false); ui->edAllPage->setEnabled(false); ui->cbCaseSensitive->setChecked(true); connect(ui->btnRead, &QPushButton::clicked, this, [&]() { read(); }); connect(ui->btnSearch, &QPushButton::clicked, this, [&]() { search(); }); connect(ui->btnSave, &QPushButton::clicked, this, [&]() { save(); }); - connect(ui->btnCopySelectLine, &QPushButton::clicked, this, [&]() { copy_select_line(); }); - connect(ui->btnDelSelectLine, &QPushButton::clicked, this, [&]() { del_select_line(); }); connect(ui->btnExit, &QPushButton::clicked, this, [&]() { QApplication::exit(0); }); connect(ui->btnReset, &QPushButton::clicked, this, &MainWidget::reset); - connect(ui->btnEditProperty, &QPushButton::clicked, this, [&]() { - Element_t* ele = get_current_select_key(); - edit_property(ele); - }); connect(ui->btnPagePre, &QPushButton::clicked, this, [&]() { unsigned int cur = ui->edCurPage->text().toUInt(); push_content(current_, cur - 1); @@ -54,7 +46,6 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget unsigned int cur = ui->edCurPage->text().toUInt(); push_content(current_, cur); }); - connect(ui->btnCopyKey, &QPushButton::clicked, this, &MainWidget::copy_key); QSettings settings; settings.beginGroup("xmlopr"); @@ -65,6 +56,8 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget if (qss_file.open(QFile::ReadOnly)) { qApp->setStyleSheet(qss_file.readAll()); } + + init_menu(); } void MainWidget::copy_key() @@ -114,8 +107,9 @@ void MainWidget::set_work_exe(char* path) 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, [&]() { context_menu_->exec(QCursor::pos()); }); auto config = ini_.get_config(); auto keys = splitString(config.purpose, ","); keys_.clear(); @@ -226,8 +220,6 @@ void MainWidget::read() ui->btnRead->setEnabled(false); ui->btnSave->setEnabled(true); - ui->btnCopySelectLine->setEnabled(true); - ui->btnDelSelectLine->setEnabled(true); } void MainWidget::search() @@ -359,6 +351,28 @@ bool MainWidget::edit_property(Element_t* target) return true; } +void MainWidget::init_menu() +{ + context_menu_ = new QMenu(); + ac_edit_property_ = new QAction(u8"编辑"); + ac_copy_curline_ = new QAction(u8"复制此项"); + ac_del_curline_ = new QAction(u8"删除此项"); + ac_copy_key_ = new QAction(u8"复制key"); + + context_menu_->addAction(ac_edit_property_); + context_menu_->addAction(ac_copy_curline_); + context_menu_->addAction(ac_del_curline_); + context_menu_->addAction(ac_copy_key_); + + connect(ac_edit_property_, &QAction::triggered, this, [&]() { + Element_t* ele = get_current_select_key(); + edit_property(ele); + }); + connect(ac_copy_curline_, &QAction::triggered, this, [&]() { copy_select_line(); }); + connect(ac_del_curline_, &QAction::triggered, this, [&]() { del_select_line(); }); + connect(ac_copy_key_, &QAction::triggered, this, [&]() { copy_key(); }); +} + void MainWidget::insert_one_line(Element_t* ele, int row) { if (ele == nullptr) { diff --git a/MainWidget.h b/MainWidget.h index eb9540b..fd9a2a7 100644 --- a/MainWidget.h +++ b/MainWidget.h @@ -3,6 +3,8 @@ #include #include +#include +#include #include #include "src/xml_opr.h" #include "src/config.h" @@ -39,6 +41,7 @@ private: void judge_btn_page(); void copy_key(); bool edit_property(Element_t* target); + void init_menu(); protected: void closeEvent(QCloseEvent* event); @@ -50,6 +53,11 @@ private: QTableWidgetItem* get_current_select_item(); private: + QMenu* context_menu_{}; + QAction* ac_edit_property_{}; + QAction* ac_copy_curline_{}; + QAction* ac_del_curline_{}; + QAction* ac_copy_key_{}; Ui::MainWidget* ui; ConfigIni ini_{}; CXmlOpr xml_{}; diff --git a/MainWidget.ui b/MainWidget.ui index efef2c3..5bb7175 100644 --- a/MainWidget.ui +++ b/MainWidget.ui @@ -6,84 +6,16 @@ 0 0 - 850 - 794 + 790 + 847 MainWidget - - - - - 0 - 0 - - - - - - - - - - - - - 读取 - - - - - - - 区分大小写 - - - - - - - - 0 - 0 - - - - - - - - 搜索 - - - - - - - 重置 - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -151,17 +83,33 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + - - - - - 退出 - - - + + + + 0 + 0 + + + + + + @@ -176,30 +124,47 @@ - - - 编辑 + + + + 0 + 0 + - + - 复制Key + 区分大小写 - + - 复制选定行 + 搜索 - + - 删除选定行 + 重置 + + + + + + + + + + + + + + 加载文件 @@ -210,6 +175,13 @@ + + + + 退出 + + +