QTreeWidgetItem添加自定义数据

本文简要介绍一个知识点,如题所示,就是如何给QTreeWidgetItem添加自定义数据。两种方法:

方法一

数据可以是任意类型(Variant类型),如果不是基本数据类型的数据,则需要定义一个结构体表示数据类型。这里这样定义:

struct User:public QObjectUserData
{
    QString imgpath;
    int itemtype;
};
Q_DECLARE_METATYPE(User)

QTreeWidget *tree = new QTreeWidget;
tree->setColumnCount(1);
tree->setHeaderLabel("标题");

QTreeWidgetItem *item = new QTreeWidgetItem(0);
item->setText(0,"hello world!");
User mydata;
mydata.imgpath = ":/new/picture/images/pc.png";
mydata.itemtype = 1;

//写入数据
item->setData(0,Qt::UserRole+1,QVariant::fromValue(mydata));

//读取数据
User data = item->data(0,Qt::UserRole+1).value<User>();
qDebug() << data.imgpath << data.itemtype;

方法二

  1. 继承QTreeWidgetItem,写一个类把信息(自定义数据)存放在里面,假设该类为MyQTreeItem。
    创建一个该类的对象:myQTreeItem和new 一个QTreeWidgetItem对象sysQTreeItem,然后执行tree->setItemWidget(sysQTreeItem ,0,(QWidget*)myQTreeItem); 0表示第1栏。

  2. 当树的节点被点击后,获取树的当前QTreeWidgetItem(假设这里是m_pCurrentItem),然后
    MyQTreeItem* myItem = (MyQTreeItem*)tree->itemWidget(m_pCurrentItem,0);获取到myItem后即可读取数据了。
    qDebug() << myItem->m_sImgPath << myItem->m_iItemType;

class MyQTreeItem:public QTreeWidgetItem
{
	Q_OBJECT
	public:
		MyQTreeItem(QWidget *parent = 0);
	public:
		QString m_sImgPath;
		int m_iItemType;
}

//前期关联数据
MyQTreeItem* myQTreeItem;
myQTreeItem->m_sImgPath = ":/new/picture/images/pc.png";
myQTreeItem->m_iItemType = 1;

QTreeWidgetItem* sysQTreeItem = new QTreeWidgetItem(0);

QTreeWidget* tree = new QTreeWidget();
tree->setItemWidget(sysQTreeItem ,0,(QWidget*)myQTreeItem);

//后期读取数据
MyQTreeItem* myItem = (MyQTreeItem*)tree->itemWidget(m_pCurrentItem,0);
qDebug() << myItem->m_sImgPath << myItem->m_iItemType;

一个开卷有益的公众号:IT平头哥
作者公众号:IT平头哥。分享工作中遇到的问题,开卷有益,欢迎来撩~

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐