为自定义树节点类dbStructureNode添加和QTreeWdigetItem一样的setData和data函数

This commit is contained in:
duanshengchao 2025-03-14 16:45:16 +08:00
parent 294c9494cf
commit 7a4f6dec76
4 changed files with 24 additions and 2 deletions

View File

@ -4,7 +4,7 @@
#include <QAbstractItemModel>
#include <QTreeWidgetItem>
#include "dbStructureNode.h"
#include "sqlQueryExecutor.h"
#include "global.h"
class DBStructureModel : public QAbstractItemModel
{

View File

@ -21,6 +21,11 @@ enum NodeStatus //节点状态(主要是ConnectionNode)
NoStatus
};
enum NodeDataRole
{
ID = 1
};
class DBStructureNode
{
public:
@ -50,12 +55,16 @@ public:
QVariant columnData(int column) const;
//QVariant icon() const;
DBStructureNode* parentNode();
//模仿QTreeWidgetItem的数据接口
void setData(int, const QVariant&);
QVariant data(int) const;
private:
NodeType m_type;
QString m_name;
QIcon m_icon;
NodeStatus m_status;
QHash<int, QVariant> m_roleData;
QList<DBStructureNode*> m_children;
DBStructureNode* m_parent;
};

View File

@ -1,4 +1,5 @@
#include "dbStructureModel.h"
#include "sqlQueryExecutor.h"
#include "logger.h"
// #include <QSqlDatabase>
// #include <QSqlQuery>
@ -84,7 +85,7 @@ QVariant DBStructureModel::data(const QModelIndex& index, int role) const
case Qt::DecorationRole:
return node->icon();
default:
return QVariant();
return node->data(role);
}
}
@ -142,10 +143,12 @@ void DBStructureModel::addDataModel(const QString& connection, Model& model)
beginInsertRows(connIndex, connNode->childCount(), connNode->childCount());
DBStructureNode* modelNode = new DBStructureNode(TableNode, model.name, connNode);
modelNode->setData(Qt::UserRole + NodeDataRole::ID, model.id);
for(int groupID : model.groups)
{
QString groupName = SqlQueryExecutor::instance().getArributeGropuName(connection, groupID);
DBStructureNode* groupNode = new DBStructureNode(GroupNode, groupName, modelNode);
groupNode->setData(Qt::UserRole + NodeDataRole::ID, groupID);
modelNode->appendChild(groupNode);
}
connNode->appendChild(modelNode);

View File

@ -130,3 +130,13 @@ DBStructureNode* DBStructureNode::parentNode()
{
return m_parent;
}
void DBStructureNode::setData(int role, const QVariant& value)
{
m_roleData[role] = value;
}
QVariant DBStructureNode::data(int role) const
{
return m_roleData.value(role, QVariant()); //不存在则返回空QVariant
}