QML树控件TreeView的使用(上)

在Qt5.5之前是没有树控件的,我们在使用时用的是ListView来构造出一个树,Qt5.5之后的QML开发阶段,有了树控件TreeView,本篇着重记录QML的TreeView的使用。根据MVC分解文件(类)如下:
TreeController.h TreeController.cpp
TreeModel.h TreeModel.cpp
TreeItem.c TreeItem.cpp
各个类职能划分如下:
TreeController主要负责用户的操作,例如加载qml文件,用户主动加载数据,主动删除数据,主动插入数据等。TreeModel主要存放数据(TreeItem为TreeModel的成员,也是存放数据的)。QML的TreeView主要显示数据。
重点在于QML的TreeView与TreeModel如何交互将数据正确显示出来。

TreeModel.h头文件如下:
class TreeModel : public QAbstractItemModel
{
	Q_OBJECT
	enum ItemRoles {
		NAME = Qt::UserRole + 1,
		SIMPLIFY
	};
public:
	TreeModel(QObject *parent = NULL);
	~TreeModel();


	void appendChild(const QModelIndex& index);
	bool removeRows(int row, int count, QModelIndex parent);


	QModelIndex parent(const QModelIndex &index) const;
	Qt::ItemFlags flags(const QModelIndex &index) const;
	QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
	int rowCount(const QModelIndex &parent = QModelIndex()) const;
	int columnCount(const QModelIndex &parent = QModelIndex()) const;
	QVariant data(const QModelIndex &index, int role) const;
	QHash<int, QByteArray> roleNames() const;


private:
	TreeItem *m_rootItem;
};
TreeItem.h头文件如下:
#ifndef TREEITEM_H  
#define TREEITEM_H  


#include <QList>  
#include <QVariant>  
#include <QStringList>
#include <QModelIndex>


class TreeItem
{
public:
	TreeItem::TreeItem();
	TreeItem(const QList<QVariant> &data, TreeItem* parent);
	~TreeItem();


	void appendChild(TreeItem *child);
	void deleteAllChild();


	TreeItem *child(int row);
	int childCount() const;
	int columnCount() const;
	QVariant data(int column) const;
	int row() const;
	TreeItem *parent();
	void setParent(TreeItem *parent);
private:
	TreeItem *m_parentItem;
	QList<TreeItem*> m_childItems;
	QList<QVariant> m_itemData;
};
#endif  
可以看出TreeModel是继承自QAbstractItemModel,其中QVariant data(const QModelIndex &index, int role) const;成员函数和QHash<int, QByteArray> roleNames() const;成员函数比较关键,是QML读取C++数据的关键函数。

TreeModel.cpp源文件如下:
TreeModel::TreeModel(QObject *parent) :
QAbstractItemModel(parent), m_rootItem(NULL)
{
	m_rootItem = new TreeItem;
	QList<QVariant> list;
  • 11
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值