为自定义树节点类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 <QAbstractItemModel>
#include <QTreeWidgetItem> #include <QTreeWidgetItem>
#include "dbStructureNode.h" #include "dbStructureNode.h"
#include "sqlQueryExecutor.h" #include "global.h"
class DBStructureModel : public QAbstractItemModel class DBStructureModel : public QAbstractItemModel
{ {

View File

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

View File

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

View File

@ -130,3 +130,13 @@ DBStructureNode* DBStructureNode::parentNode()
{ {
return m_parent; 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
}