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;
方法二
-
继承QTreeWidgetItem,写一个类把信息(自定义数据)存放在里面,假设该类为MyQTreeItem。
创建一个该类的对象:myQTreeItem和new 一个QTreeWidgetItem对象sysQTreeItem,然后执行tree->setItemWidget(sysQTreeItem ,0,(QWidget*)myQTreeItem); 0表示第1栏。 -
当树的节点被点击后,获取树的当前QTreeWidgetItem(假设这里是m_pCurrentItem),然后
MyQTreeItem* myItem = (MyQTreeItem*)tree->itemWidget(m_pCurrentItem,0);获取到myItem后即可读取数据了。
qDebug() << myItem->m_sImgPath << myItem->m_iItemType;
class MyQTreeItem:public QTreeWidgetItem
{Q_OBJECTpublic: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平头哥。分享工作中遇到的问题,开卷有益,欢迎来撩~