From 1f42960e74eb2d348125a20ffc69489a3995829c Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Mon, 24 Mar 2025 19:55:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=B1=9E=E6=80=A7=E7=BB=84?= =?UTF-8?q?=E6=B5=8F=E8=A7=88tab=E7=9A=84=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dbBrowser.h | 4 +++- include/dbStructureView.h | 1 + source/dbBrowser.cpp | 41 ++++++++++++++++++++++++++++++++++---- source/dbStructureView.cpp | 27 +++++++++++++++---------- ui/dbBrowser.ui | 14 ++++++++++++- 5 files changed, 70 insertions(+), 17 deletions(-) diff --git a/include/dbBrowser.h b/include/dbBrowser.h index cf8b952..aa6ea78 100644 --- a/include/dbBrowser.h +++ b/include/dbBrowser.h @@ -22,9 +22,11 @@ public: void addTab_attribute(const QString&, ModelAttributeGroup&); private slots: - void closeTab(QWidget*); + void onBtnClick_tabCloseBtn(int); private: + int tabIndex(const QString&); + Ui::DatabaseBrowser *ui; QList m_attributeViewList; }; diff --git a/include/dbStructureView.h b/include/dbStructureView.h index c62a5c8..7baff8e 100644 --- a/include/dbStructureView.h +++ b/include/dbStructureView.h @@ -34,6 +34,7 @@ private: void connectToDB(const QString&); void disconnectToDB(const QString&); void removeNode(DBStructureNode*); + void openAttributeGroup(DBStructureNode*); signals: void actionTrigger_addModel(); diff --git a/source/dbBrowser.cpp b/source/dbBrowser.cpp index 7325bee..56beef8 100644 --- a/source/dbBrowser.cpp +++ b/source/dbBrowser.cpp @@ -8,6 +8,8 @@ DatabaseBrowser::DatabaseBrowser(QWidget *parent) , ui(new Ui::DatabaseBrowser) { ui->setupUi(this); + + connect(ui->tabWidget, &QTabWidget::tabCloseRequested, this, &DatabaseBrowser::onBtnClick_tabCloseBtn); } DatabaseBrowser::~DatabaseBrowser() @@ -15,12 +17,34 @@ DatabaseBrowser::~DatabaseBrowser() delete ui; } +int DatabaseBrowser::tabIndex(const QString& tabText) +{ + for(int i = 0; i < ui->tabWidget->count(); i++) + { + QString strText = ui->tabWidget->tabText(i); + if(ui->tabWidget->tabText(i) == tabText) + return i; + } + + return -1; +} + void DatabaseBrowser::addTab_attribute(const QString& connection, ModelAttributeGroup& attributeGroup) { + QString tabText = attributeGroup.strModelName + "/" + attributeGroup.strGroupName; + int index = tabIndex(tabText); + if(index != -1) + { + ui->tabWidget->setCurrentIndex(index); + return; + } + AttributeView* view = new AttributeView(ui->tabWidget, connection, QString::number(attributeGroup.modelID), QString::number(attributeGroup.groupID)); - int index = ui->tabWidget->addTab(view, QIcon(":/img/images/icon_hierarchy.png"), attributeGroup.strGroupName); + index = ui->tabWidget->addTab(view, QIcon(":/img/images/icon_hierarchy.png"), tabText); //添加自定义按钮 - QPushButton* closeBtn = new QPushButton(""); + /*QPushButton* closeBtn = new QPushButton(""); + closeBtn->setProperty("index", index); + connect(closeBtn, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClick_tabCloseBtn); closeBtn->setFixedSize(12, 12); closeBtn->setStyleSheet("QPushButton\n" "{\n" @@ -35,11 +59,20 @@ void DatabaseBrowser::addTab_attribute(const QString& connection, ModelAttribute " border-image: url(:/img/images/btn_close_pressed.png);\n" "}"); QTabBar* tabBar = ui->tabWidget->tabBar(); - tabBar->setTabButton(index, QTabBar::RightSide, closeBtn); + tabBar->setTabButton(index, QTabBar::RightSide, closeBtn);*/ ui->tabWidget->setCurrentIndex(index); } -void DatabaseBrowser::closeTab(QWidget* tab) +void DatabaseBrowser::onBtnClick_tabCloseBtn(int index) { + /*QObject* sender = QObject::sender(); + QPushButton* button = qobject_cast(sender); + if(!button) + return; + + int index = button->property("index").toInt();*/ + QWidget* widget = ui->tabWidget->widget(index); + ui->tabWidget->removeTab(index); + delete widget; } diff --git a/source/dbStructureView.cpp b/source/dbStructureView.cpp index 1361ef1..0e687f5 100644 --- a/source/dbStructureView.cpp +++ b/source/dbStructureView.cpp @@ -101,6 +101,20 @@ void DBStructureView::removeNode(DBStructureNode* node) } } +void DBStructureView::openAttributeGroup(DBStructureNode* node) +{ + DBStructureNode* parent = node->parentNode(); + if(parent && parent->type() == TableNode) + { + int modelID = parent->data(Qt::UserRole + NodeDataRole::ID).toInt(); + int groupID = node->data(Qt::UserRole + NodeDataRole::ID).toInt(); + QString modelName = parent->name(); + QString groupName = node->name(); + ModelAttributeGroup attributeGroup(modelID, groupID, modelName, groupName); + emit openAttributeInfo(m_curConnection, attributeGroup); + } +} + void DBStructureView::disconnectCurConnection() { if(!m_curConnection.isEmpty()) @@ -154,16 +168,7 @@ void DBStructureView::itemDoubleClick(const QModelIndex& index) } else if(node->type() == GroupNode) { - DBStructureNode* parent = node->parentNode(); - if(parent && parent->type() == TableNode) - { - int modelID = parent->data(Qt::UserRole + NodeDataRole::ID).toInt(); - int groupID = node->data(Qt::UserRole + NodeDataRole::ID).toInt(); - QString modelName = parent->name(); - QString groupName = node->name(); - ModelAttributeGroup attributeGroup(modelID, groupID, modelName, groupName); - emit openAttributeInfo(m_curConnection, attributeGroup); - } + openAttributeGroup(node); } } @@ -227,7 +232,7 @@ void DBStructureView::showContextMenu(const QPoint& pos) }); menu.addSeparator(); menu.addAction(QString::fromWCharArray(L"刷新"), []{}); - menu.addAction(QString::fromWCharArray(L"打开"), []{}); + menu.addAction(QString::fromWCharArray(L"打开"), [this, node]{openAttributeGroup(node);}); menu.addSeparator(); menu.addAction(QString::fromWCharArray(L"清空数据"), []{}); QPoint originPoint = this->mapToGlobal(QPoint(0,0)); diff --git a/ui/dbBrowser.ui b/ui/dbBrowser.ui index e592fb8..a92b89f 100644 --- a/ui/dbBrowser.ui +++ b/ui/dbBrowser.ui @@ -31,11 +31,23 @@ + + QTabBar::close-button { + border-image: url(:/img/images/btn_close_default.png); + margin:2px; +} +QTabBar::close-button:hover { + border-image: url(:/img/images/btn_close_hover.png); +} +QTabBar::close-button:pressed { + border-image: url(:/img/images/btn_close_pressed.png); +} + -1 - false + true