实现属性组浏览tab的关闭

This commit is contained in:
duanshengchao 2025-03-24 19:55:01 +08:00
parent f9ff317b46
commit 1f42960e74
5 changed files with 70 additions and 17 deletions

View File

@ -22,9 +22,11 @@ public:
void addTab_attribute(const QString&, ModelAttributeGroup&); void addTab_attribute(const QString&, ModelAttributeGroup&);
private slots: private slots:
void closeTab(QWidget*); void onBtnClick_tabCloseBtn(int);
private: private:
int tabIndex(const QString&);
Ui::DatabaseBrowser *ui; Ui::DatabaseBrowser *ui;
QList<AttributeView> m_attributeViewList; QList<AttributeView> m_attributeViewList;
}; };

View File

@ -34,6 +34,7 @@ private:
void connectToDB(const QString&); void connectToDB(const QString&);
void disconnectToDB(const QString&); void disconnectToDB(const QString&);
void removeNode(DBStructureNode*); void removeNode(DBStructureNode*);
void openAttributeGroup(DBStructureNode*);
signals: signals:
void actionTrigger_addModel(); void actionTrigger_addModel();

View File

@ -8,6 +8,8 @@ DatabaseBrowser::DatabaseBrowser(QWidget *parent)
, ui(new Ui::DatabaseBrowser) , ui(new Ui::DatabaseBrowser)
{ {
ui->setupUi(this); ui->setupUi(this);
connect(ui->tabWidget, &QTabWidget::tabCloseRequested, this, &DatabaseBrowser::onBtnClick_tabCloseBtn);
} }
DatabaseBrowser::~DatabaseBrowser() DatabaseBrowser::~DatabaseBrowser()
@ -15,12 +17,34 @@ DatabaseBrowser::~DatabaseBrowser()
delete ui; 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) 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)); 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->setFixedSize(12, 12);
closeBtn->setStyleSheet("QPushButton\n" closeBtn->setStyleSheet("QPushButton\n"
"{\n" "{\n"
@ -35,11 +59,20 @@ void DatabaseBrowser::addTab_attribute(const QString& connection, ModelAttribute
" border-image: url(:/img/images/btn_close_pressed.png);\n" " border-image: url(:/img/images/btn_close_pressed.png);\n"
"}"); "}");
QTabBar* tabBar = ui->tabWidget->tabBar(); QTabBar* tabBar = ui->tabWidget->tabBar();
tabBar->setTabButton(index, QTabBar::RightSide, closeBtn); tabBar->setTabButton(index, QTabBar::RightSide, closeBtn);*/
ui->tabWidget->setCurrentIndex(index); ui->tabWidget->setCurrentIndex(index);
} }
void DatabaseBrowser::closeTab(QWidget* tab) void DatabaseBrowser::onBtnClick_tabCloseBtn(int index)
{ {
/*QObject* sender = QObject::sender();
QPushButton* button = qobject_cast<QPushButton*>(sender);
if(!button)
return;
int index = button->property("index").toInt();*/
QWidget* widget = ui->tabWidget->widget(index);
ui->tabWidget->removeTab(index);
delete widget;
} }

View File

@ -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() void DBStructureView::disconnectCurConnection()
{ {
if(!m_curConnection.isEmpty()) if(!m_curConnection.isEmpty())
@ -154,16 +168,7 @@ void DBStructureView::itemDoubleClick(const QModelIndex& index)
} }
else if(node->type() == GroupNode) else if(node->type() == GroupNode)
{ {
DBStructureNode* parent = node->parentNode(); openAttributeGroup(node);
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);
}
} }
} }
@ -227,7 +232,7 @@ void DBStructureView::showContextMenu(const QPoint& pos)
}); });
menu.addSeparator(); menu.addSeparator();
menu.addAction(QString::fromWCharArray(L"刷新"), []{}); menu.addAction(QString::fromWCharArray(L"刷新"), []{});
menu.addAction(QString::fromWCharArray(L"打开"), []{}); menu.addAction(QString::fromWCharArray(L"打开"), [this, node]{openAttributeGroup(node);});
menu.addSeparator(); menu.addSeparator();
menu.addAction(QString::fromWCharArray(L"清空数据"), []{}); menu.addAction(QString::fromWCharArray(L"清空数据"), []{});
QPoint originPoint = this->mapToGlobal(QPoint(0,0)); QPoint originPoint = this->mapToGlobal(QPoint(0,0));

View File

@ -31,11 +31,23 @@
</property> </property>
<item> <item>
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="styleSheet">
<string notr="true">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);
}</string>
</property>
<property name="currentIndex"> <property name="currentIndex">
<number>-1</number> <number>-1</number>
</property> </property>
<property name="tabsClosable"> <property name="tabsClosable">
<bool>false</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>