gldemo
HierarchyModel.h
1 #pragma once
2 
3 #include <vector>
4 
5 #include "qstring.h"
6 #include "qmimedata.h"
7 #include "qmimetype.h"
8 
9 #include "nesteddefs.h"
10 #include "qabstractitemmodel.h"
11 #include "qitemselectionmodel.h"
12 
19 class HierarchyModel : public QAbstractItemModel
20 {
21  Q_OBJECT
22 
23 private:
25  std::vector<HierarchyObject*> objects;
26 
27 public slots:
29  void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
30 
31 
32 public:
38  QModelIndex lastRightClick;
42  int objectCount() { return objects.size(); }
44  HierarchyObject* getObject(int i) { return objects[i]; }
45 
47  ~HierarchyModel();
49  HierarchyObject* createObject(const QString& name);
51  void moveObject(HierarchyObject* obj, HierarchyObject* toParent, int toIndex);
53  void removeObject(HierarchyObject* obj);
55  HierarchyObject* index2obj(const QModelIndex &index) const;
57  QModelIndex obj2index(HierarchyObject* obj) const;
59  bool HierarchyModel::retrieveDroppedObjects(const QMimeData * data, std::vector<HierarchyObject*>& out_objects) const;
60 
61 
62  // -------------实现QAbstractItemModel的必选接口-----------------
63  // 获取给定元素的第row个子元素
64  QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
65  // 获取给定元素的父元素
66  QModelIndex parent(const QModelIndex &index) const;
67  // 获取某元素的子节点数
68  int rowCount(const QModelIndex &parent = QModelIndex()) const;
69  // (永远return1)
70  int columnCount(const QModelIndex &parent = QModelIndex()) const;
71  // 取出数据(name)
72  QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
73 
74  // ----------------------重写可选函数----------------------------
75  // 接收编辑name事件
76  bool setData(const QModelIndex & index, const QVariant & value, int role);
77  // 返回指定节点的各种显示属性
78  Qt::ItemFlags flags(const QModelIndex &index) const;
79  // 是否允许拖放到指定节点
80  bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const; //drop是否允许
81  // 拖放拖出时产生mimeData
82  QMimeData *mimeData(const QModelIndexList &indexes) const;
83  // 拖放事件接收mimeData
84  bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); //drop事件
85  // 返回允许的mimeType
86  QStringList mimeTypes() const;
87  // 允许的action
88  Qt::DropActions supportedDropActions() const;
89 
90  QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
91 };
92 
HierarchyObject * index2obj(const QModelIndex &index) const
根据QModelIndex取出对应HierarchyObject
Definition: HierarchyModel.cpp:81
std::vector< HierarchyObject * > objects
储存所有被创建的节点
Definition: HierarchyModel.h:25
QModelIndex lastRightClick
右键菜单触发时记录下右键点击的节点
Definition: HierarchyModel.h:38
HierarchyObject * lastSelected
记录用户选中的最后一个物体
Definition: HierarchyModel.h:40
HierarchyObject * getObject(int i)
按某种顺序访问节点
Definition: HierarchyModel.h:44
QModelIndex obj2index(HierarchyObject *obj) const
根据obj创建index
Definition: HierarchyModel.cpp:93
对场景树的ui显示进行统一的管理
Definition: HierarchyModel.h:19
void removeObject(HierarchyObject *obj)
移除一个节点
Definition: HierarchyModel.cpp:73
表示场景树中的节点
Definition: HierarchyObject.h:27
int objectCount()
节点总数
Definition: HierarchyModel.h:42
void moveObject(HierarchyObject *obj, HierarchyObject *toParent, int toIndex)
移动树结构中的节点
Definition: HierarchyModel.cpp:34
bool retrieveDroppedObjects(const QMimeData *data, std::vector< HierarchyObject * > &out_objects) const
取出mime里面的拖放来源
Definition: HierarchyModel.cpp:262
HierarchyObject * createObject(const QString &name)
创建HierarchyObject并进行一些初始化操作
Definition: HierarchyModel.cpp:17
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
接收ui中选择变更事件
Definition: HierarchyModel.cpp:101
OpenGL渲染窗口
Definition: widget.h:74
Widget * widget
对应的widget
Definition: HierarchyModel.h:36
HierarchyObject * root
树根节点
Definition: HierarchyModel.h:34