完成‘修改模型信息’时更改了模型名称,该模型下被打开的属性组浏览tab的文字也做同步更新

This commit is contained in:
duanshengchao 2025-06-04 18:41:55 +08:00
parent 4c3f3db44b
commit 2fa520e6a6
9 changed files with 88 additions and 9 deletions

View File

@ -25,6 +25,7 @@ public:
void addTab_attribute(const QString&, ModelAttributeGroup&);
void closeTab_attribute(ModelAttributeGroup&);
void closeAllTab_attribute();
void updateTabTextByModelNameChanged(const QString&, const QString&);
protected:
bool eventFilter(QObject*, QEvent*) override;

View File

@ -41,6 +41,7 @@ signals:
public slots:
void refreshStructure_Connection(const QString& connection); //刷新某个链接的数据(比如刷新、关闭或者手动刷新时)
void refreshStructure_Model(const QString& connection, int modelID);
private:
DBStructureNode* getNode(const QModelIndex& index) const;

View File

@ -67,7 +67,8 @@ private slots:
void onSIG_connectionStatusChanged(const QString& strConnectionName, bool bConnected);
void onSIG_addModel(Model&);
void onSIG_addGroups(int, QVector<int>);
void onSIG_updateModelNodeText(int, const QString&);
void onSIG_updateModelNodeText(int, const QString&, const QString&);
void onSIG_updateModelGroups(int, const QVector<int>&, const QVector<int>&);
//void onSIG_addAttributes();
void onSIG_openAttributeInfo(const QString&, ModelAttributeGroup&);
void onSIG_closeAttributeInfo(ModelAttributeGroup&);

View File

@ -57,7 +57,8 @@ private:
signals:
void addModel(Model&);
void updateModelNodeText(int, const QString&);
void updateModelNodeText(int, const QString&, const QString&);
void updateModelGroups(int, const QVector<int>&, const QVector<int>&);
public slots:
void onBtnClicked_selectImage();

View File

@ -152,6 +152,19 @@ void DatabaseBrowser::closeAllTab_attribute()
onTabCloseRequested(0);
}
void DatabaseBrowser::updateTabTextByModelNameChanged(const QString& oldName, const QString& newName)
{
for(int i = 0; i < ui->tabWidget->count(); i++)
{
QStringList textList = ui->tabWidget->tabText(i).split("/");
if(textList.size() == 2 && textList.at(0) == oldName)
{
QString newTabText = newName + "/" + textList.at(1);
ui->tabWidget->setTabText(i, newTabText);
}
}
}
void DatabaseBrowser::onTabCloseRequested(int index)
{
/*QObject* sender = QObject::sender();

View File

@ -265,14 +265,14 @@ void DBStructureModel::addDataGroup(const QString& connection, int modelID, QVec
DBStructureNode* connNode = getConnectionNode(connection);
if(!connNode)
{
LOG_ERROR("DBStructureModel", QString::fromWCharArray(L"添加组时获取ConnectionNode失败节点名称:%1").arg(connection));
LOG_ERROR("DBStructureModel", QString::fromWCharArray(L"添加属性组时获取ConnectionNode失败节点名称:%1").arg(connection));
return;
}
DBStructureNode* modelNode = getModelNode(connNode, modelID);
if(!connNode)
{
LOG_ERROR("DBStructureModel", QString::fromWCharArray(L"添加组时获取ModelNode失败节点ID:%1").arg(modelID));
LOG_ERROR("DBStructureModel", QString::fromWCharArray(L"添加属性组时获取ModelNode失败节点ID:%1").arg(modelID));
return;
}
@ -409,5 +409,49 @@ void DBStructureModel::refreshStructure_Connection(const QString& connection)
QModelIndex bottomRight = index(connNode->row(), 0, QModelIndex());
emit dataChanged(topLeft, bottomRight, {Qt::DecorationRole});
}
}
void DBStructureModel::refreshStructure_Model(const QString& connection, int modelID)
{
DBStructureNode* connNode = getConnectionNode(connection);
if(!connNode)
{
LOG_ERROR("DBStructureModel", QString::fromWCharArray(L"刷新模型节点时获取ConnectionNode失败节点名称:%1").arg(connection));
return;
}
QModelIndex connIndex = index(connNode->row(), 0, QModelIndex());
DBStructureNode* modelNode = getModelNode(connNode, modelID);
if(!connNode)
{
LOG_ERROR("DBStructureModel", QString::fromWCharArray(L"刷新模型节点时获取ModelNode失败节点ID:%1").arg(modelID));
return;
}
//先删除
if(modelNode->childCount() > 0)
{
beginRemoveRows(index(modelNode->row(), 0, connIndex), 0, modelNode->childCount() - 1);
modelNode->removeAllChildren();
endRemoveRows(); //该语句之后会触发rowsRemoved(const QModelIndex &parent, int first, int last)信号,通知视图刷新对应行
}
//读取最新数据重新添加
QVector<int> groups = SqlQueryExecutor::instance().getModelGroups(connection, modelID);
beginInsertRows(index(modelNode->row(), 0, connIndex), 0, groups.count() - 1);
for(int groupID : groups)
{
//QString groupName = SqlQueryExecutor::instance().getAttributeGroupName(connection, groupID);
AttributeGroup group = SqlQueryExecutor::instance().getAttributeGroupData(connection, groupID);
if(group.name.isEmpty())
continue;
DBStructureNode* groupNode = new DBStructureNode(GroupNode, group.name, modelNode);
groupNode->setData(Qt::UserRole + NodeDataRole::ID, groupID);
groupNode->setData(Qt::UserRole + NodeDataRole::Type, group.isPublic);
modelNode->appendChild(groupNode);
}
endInsertRows();
}

View File

@ -307,7 +307,11 @@ void DBStructureView::showContextMenu(const QPoint& pos)
closeAttributeGroup(node);
removeNode(node);
});
menu.addAction(QString::fromWCharArray(L"刷新"), []{});
menu.addAction(QString::fromWCharArray(L"刷新"), [this, node]{
DBStructureModel* model = dynamic_cast<DBStructureModel*>(this->model());
if(model && node->parentNode())
model->refreshStructure_Model(node->parentNode()->name(), node->data(Qt::UserRole + NodeDataRole::ID).toInt());
});
menu.addSeparator();
menu.addAction(QString::fromWCharArray(L"修改"), [this, node]{
emit acitonTrigger_updateModel(node->data(Qt::UserRole + NodeDataRole::ID).toInt());

View File

@ -351,10 +351,24 @@ void MainWindow::onSIG_addGroups(int modelID, QVector<int> groups)
m_pDBStrutureModel->addDataGroup(connection, modelID, groups);
}
void MainWindow::onSIG_updateModelNodeText(int modelID, const QString& text)
void MainWindow::onSIG_updateModelNodeText(int modelID, const QString& oldText, const QString& newText)
{
QString connection = m_pDBStrutureView->curConnection();
m_pDBStrutureModel->updateDataModelName(connection, modelID, text);
m_pDBStrutureModel->updateDataModelName(connection, modelID, newText);
//更新tab的text(若打开)
if(m_dbBrowser)
m_dbBrowser->updateTabTextByModelNameChanged(oldText, newText);
}
void MainWindow::onSIG_updateModelGroups(int modelID, const QVector<int>& removed, const QVector<int>& added)
{
//执行步骤1、删除相应数据行组. 2、添加相应属性组. 3、刷新模型节点
QString connection = m_pDBStrutureView->curConnection();
for(int groupID : removed)
{
// if(SqlQueryExecutor::instance().removeAttributeGroup(connection, modelID, groupID) && m_dbBrowser)
// m_dbBrowser->closeTab_attribute()
}
}
void MainWindow::onSIG_openAttributeInfo(const QString& connection, ModelAttributeGroup& attributeGroup)

View File

@ -372,14 +372,14 @@ void ModelInfoEditDialog::onBtnClicked_save()
{
if(modelName != m_oldName) //更新对应树节点
{
emit updateModelNodeText(m_curModelID, modelName);
emit updateModelNodeText(m_curModelID, m_oldName, modelName);
}
//计算删除和添加的属性组-转化为QSet然后利用QSet的-’运算符操作
QSet<int> oldSet(m_oldGroups.begin(), m_oldGroups.end());
QSet<int> newSet(model.groups.begin(), model.groups.end());
QSet<int> added = newSet - oldSet;
QSet<int> removed = oldSet - newSet;
emit updateModelGroups(m_curModelID, removed.values(), added.values());
close();
}