提示:本文中的 Demo 已 push 到 github,可忽略本文直接到 我的github 中查看代码。
Qt 提供了 QuickControl TreeView
。但是比较奇葩的是该控件不能直接使用,而需要用户自己扩展实现。
官方给出了一个示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
TreeView { TableViewColumn { title: "Name" role: "fileName" width: 300 } TableViewColumn { title: "Permissions" role: "filePermissions" width: 100 } model: fileSystemModel } |
它声明了一个 TreeView控件,该控件有 2 列,分别为 Name 和 Permissions,还有一个名为 fileSystemModel 的 model
。对用户来说,这里的 model 是一个关键性的对象,它需要用户使用 C++ 实现 ,并注册到 qml 中供 TreeView 使用。按官方的说法, model 是一个 为 tree view 提供数据的属性,它包含了 tree view 将要展示的数据。
用户的 model 必须继承于 QAbstractItemModel
类。
该类是一个抽象类,在运行中,treeview 从该类中获取用户数据,再在UI上展示。该类有如下纯虚函数,必须在子类中实现:
1 2 3 4 5 |
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0; virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0; virtual QModelIndex parent(const QModelIndex &index) const = 0; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; |