From abfa8a49f453bb7bffcd389d8c47fde361b83c26 Mon Sep 17 00:00:00 2001 From: lanjian Date: Wed, 15 Feb 2023 10:07:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20DockWidget=20=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=8C=89=E9=92=AE=EF=BC=9B=E4=B8=B0=E5=AF=8C?= =?UTF-8?q?=20find=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/docktitlewidget.cpp | 9 +-- src/docktitlewidget.h | 1 + src/docktitlewidget.ui | 163 +++++++++++++++++++++++++++++++--------- src/image.qrc | 1 + src/nddjsonplugin.cpp | 24 +++++- src/res/close.ico | Bin 0 -> 1022 bytes 6 files changed, 154 insertions(+), 44 deletions(-) create mode 100644 src/res/close.ico diff --git a/src/docktitlewidget.cpp b/src/docktitlewidget.cpp index 1bd3ea4..be13443 100644 --- a/src/docktitlewidget.cpp +++ b/src/docktitlewidget.cpp @@ -15,17 +15,12 @@ DockTitleWidget::DockTitleWidget(QWidget *parent) : QWidget(parent), ui(new Ui:: ui->pb_validate->setIcon(QIcon(tr(":/res/validate.ico"))); ui->pb_format->setIcon(QIcon(tr(":/res/format.ico"))); ui->pb_search->setIcon(QIcon(tr(":/res/search.ico"))); - - ui->pb_search->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - // ui->pb_search->sizePolicy().setVerticalStretch(20); - // ui->pb_search->sizePolicy().setHorizontalStretch(20); - ui->pb_search->setFixedSize(20, 20); - ui->pb_search->setMinimumWidth(20); - ui->pb_search->setMaximumWidth(20); + ui->pb_close->setIcon(QIcon(tr(":/res/close.ico"))); connect(ui->pb_refresh, &QPushButton::clicked, this, [this] { emit sigRefreshClicked(); }); connect(ui->pb_validate, &QPushButton::clicked, this, [this] { emit sigValidateClicked(); }); connect(ui->pb_format, &QPushButton::clicked, this, [this] { emit sigFormatClicked(); }); + connect(ui->pb_close, &QPushButton::clicked, this, [this] { emit sigCloseClicked(); }); connect(ui->pb_search, &QPushButton::clicked, this, [this] { ui->lineEdit->selectAll(); emit sigFindClicked(ui->lineEdit->text()); diff --git a/src/docktitlewidget.h b/src/docktitlewidget.h index 49bce39..266a2ef 100644 --- a/src/docktitlewidget.h +++ b/src/docktitlewidget.h @@ -26,6 +26,7 @@ signals: void sigRefreshClicked(); void sigValidateClicked(); void sigFormatClicked(); + void sigCloseClicked(); void sigFindClicked(const QString &str); private: diff --git a/src/docktitlewidget.ui b/src/docktitlewidget.ui index 3484925..f3b505b 100644 --- a/src/docktitlewidget.ui +++ b/src/docktitlewidget.ui @@ -6,48 +6,141 @@ 0 0 - 228 + 392 43 DockTitleWidget - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + 20 + 0 + + + + + 20 + 0 + + + + + 20 + 16777215 + + + + + + + + + + + + 20 + 0 + + + + + 20 + 0 + + + + + 20 + 16777215 + + + + + + + + + + + + 20 + 0 + + + + + 20 + 0 + + + + + 20 + 16777215 + + + + + + + + + + + + + + + 20 + 0 + + + + + 20 + 0 + + + + + 20 + 16777215 + + + + + + + + + + + + 15 + 20 + + + + + 15 + 20 + + + + + 15 + 20 + + + + + + diff --git a/src/image.qrc b/src/image.qrc index 3960f75..1dcd406 100644 --- a/src/image.qrc +++ b/src/image.qrc @@ -5,5 +5,6 @@ res/Refresh.ico res/search.ico res/validate.ico + res/close.ico \ No newline at end of file diff --git a/src/nddjsonplugin.cpp b/src/nddjsonplugin.cpp index 2619647..4fb8b23 100644 --- a/src/nddjsonplugin.cpp +++ b/src/nddjsonplugin.cpp @@ -26,6 +26,7 @@ NDDJsonPlugin::NDDJsonPlugin(QWidget *mainWidget, const QString &pluginPath, Qsc treeView_(new QTreeView) { dockWidget_->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable); + dockWidget_->setAllowedAreas(Qt::LeftDockWidgetArea); dockWidget_->hide(); @@ -35,10 +36,12 @@ NDDJsonPlugin::NDDJsonPlugin(QWidget *mainWidget, const QString &pluginPath, Qsc connect(dockWidgetTitle, &DockTitleWidget::sigRefreshClicked, this, [this] { refreshTableJson(); }); connect(dockWidgetTitle, &DockTitleWidget::sigValidateClicked, this, [this] { validateJson(); }); connect(dockWidgetTitle, &DockTitleWidget::sigFormatClicked, this, [this] { formattingJson(); }); + connect(dockWidgetTitle, &DockTitleWidget::sigCloseClicked, this, [this] { dockWidget_->hide(); }); connect(dockWidgetTitle, &DockTitleWidget::sigFindClicked, this, [this](const QString &str) { findNode(str); }); treeView_->setEditTriggers(QAbstractItemView::NoEditTriggers); treeView_->header()->setSectionResizeMode(QHeaderView::ResizeToContents); + treeView_->setModel(jsonModel_); dockWidget_->setWidget(treeView_); @@ -240,7 +243,14 @@ void NDDJsonPlugin::validateJson() } void NDDJsonPlugin::findNode(const QString &str) { - auto match = jsonModel_->match(jsonModel_->index(0, 0), Qt::DisplayRole, QVariant::fromValue(str)); + auto selected = treeView_->currentIndex(); + if (!selected.isValid()) + { + selected = jsonModel_->index(0, 0); + } + + auto match = jsonModel_->match(selected, Qt::DisplayRole, QVariant::fromValue(str), 2, + Qt::MatchContains | Qt::MatchRecursive | Qt::MatchRegExp); if (!match.isEmpty()) { treeView_->setExpanded(match.first(), true); @@ -248,7 +258,17 @@ void NDDJsonPlugin::findNode(const QString &str) } else { - showMessage("Warning", QString("Cannot found with %1").arg(str).toStdString(), 1); + match = jsonModel_->match(jsonModel_->index(0, 0), Qt::DisplayRole, QVariant::fromValue(str), 2, + Qt::MatchContains | Qt::MatchRecursive | Qt::MatchRegExp); + if (!match.isEmpty()) + { + treeView_->setExpanded(match.first(), true); + treeView_->keyboardSearch(str); + } + else + { + showMessage("Warning", QString("Cannot found with %1").arg(str).toStdString(), 1); + } } } void NDDJsonPlugin::setScintilla(const std::function &cb) diff --git a/src/res/close.ico b/src/res/close.ico new file mode 100644 index 0000000000000000000000000000000000000000..f34899c46fe6babdd770987e810261376f006c17 GIT binary patch literal 1022 zcmbW0Jx&8L5QPVjC`lJOL`lzI3*-QtBOQV+6$(^2Ng6mokdTnz3Mna(*ifKFSuMim zeO?_OxQwG_x&1lx+y`JeTs_tyKs_T=rVIMKonk zga_eOaM7}d#~)&mrvI}0!i`W0{s+M0CvI9d+&#+u_CfA<4kxwj;qgm1tm!$&0KRqn z=DWSZw@=3*Z;TClc>IwYNR#R-c`ttFydS+d-?=D4T&G)vJv@Hmq~rY5e=me{k}s2v z=Q(q}e_aO49=?4xuGfQ(etz|aJlUwyqv2uCIqGpy_mMbi0sX7862+DL$(Lef(M{&n z`~Q*myI$2Zw_f$5_WjV&ui1UpIq3V0KCer=$oECZd@*N>%vG9A^z-KVJ^G0YnyLGc Z=Il@R=uvm_cGc{BIbO(L3~|Jx`vl|eHG}{F literal 0 HcmV?d00001 -- Gitee From e5b170beb9851fd1ea57ac3535f1bf3edfe64fa5 Mon Sep 17 00:00:00 2001 From: lanjian Date: Wed, 15 Feb 2023 10:38:48 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20DockWidget=20=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=A4=A7=E5=B0=8F=EF=BC=9B=E4=BF=AE=E5=A4=8D=20Find?= =?UTF-8?q?=20=E7=9A=84=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E7=94=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/docktitlewidget.ui | 9 ++++++++- src/nddjsonplugin.cpp | 25 +++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/docktitlewidget.ui b/src/docktitlewidget.ui index f3b505b..99d0ec5 100644 --- a/src/docktitlewidget.ui +++ b/src/docktitlewidget.ui @@ -90,7 +90,14 @@ - + + + + 200 + 0 + + + diff --git a/src/nddjsonplugin.cpp b/src/nddjsonplugin.cpp index 4fb8b23..868b4e7 100644 --- a/src/nddjsonplugin.cpp +++ b/src/nddjsonplugin.cpp @@ -243,27 +243,36 @@ void NDDJsonPlugin::validateJson() } void NDDJsonPlugin::findNode(const QString &str) { + bool isStartSelected = false; auto selected = treeView_->currentIndex(); if (!selected.isValid()) { + isStartSelected = true; selected = jsonModel_->index(0, 0); } - auto match = jsonModel_->match(selected, Qt::DisplayRole, QVariant::fromValue(str), 2, - Qt::MatchContains | Qt::MatchRecursive | Qt::MatchRegExp); + auto match = jsonModel_->match(selected, Qt::DisplayRole, QVariant::fromValue("*" + str + "*"), 2, + Qt::MatchContains | Qt::MatchRecursive | Qt::MatchRegExp | Qt::MatchWrap); if (!match.isEmpty()) { treeView_->setExpanded(match.first(), true); - treeView_->keyboardSearch(str); + treeView_->setCurrentIndex(match.first()); } else { - match = jsonModel_->match(jsonModel_->index(0, 0), Qt::DisplayRole, QVariant::fromValue(str), 2, - Qt::MatchContains | Qt::MatchRecursive | Qt::MatchRegExp); - if (!match.isEmpty()) + if (!isStartSelected) { - treeView_->setExpanded(match.first(), true); - treeView_->keyboardSearch(str); + match = jsonModel_->match(jsonModel_->index(0, 0), Qt::DisplayRole, QVariant::fromValue("*" + str + "*"), 2, + Qt::MatchContains | Qt::MatchRecursive | Qt::MatchRegExp | Qt::MatchWrap); + if (!match.isEmpty()) + { + treeView_->setExpanded(match.first(), true); + treeView_->setCurrentIndex(match.first()); + } + else + { + showMessage("Warning", QString("Cannot found with %1").arg(str).toStdString(), 1); + } } else { -- Gitee