QTreeWidgterItem - 隐藏值或添加属性

时间:2015-03-01 08:29:21

标签: c++ qt

我目前正在使用QTreeWidget来显示树中的项目。通常它是基于3列定义的。

我需要知道的是,是否有办法添加一种隐藏价值或附加属性。

目前,该树用于将文件和浏览器显示为文件浏览器。我显示文件名,大小和日期。

对于每个项目,我想定义一个id,它引用访问它的特定方式。

例如:文件toto.jpg由文件名toto.jpg,日期和大小定义,但我还想保存其ID。让我们说48

现在,当访问树时,我可以item->text == toto.jpg然后获取id作为项目的参数。

这是我使用的功能。

QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0, "New Folder");
child->setText(1, "--");
child->setText(2, "--");
child->setFlags(child->flags() | Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEditable);

child->setIcon(0,QIcon(":/Images/folder_pic.png"));

我有兴趣拥有child->setIndex / getIndex或定义隐藏的第4列。在那种情况下,我可以使用

child->setText(3,id) 

并隐藏第3列

任何想法或任何方法(如果我需要切换到treeview而不是treewidget,请告诉我们)?

1 个答案:

答案 0 :(得分:2)

我认为您不需要定义第4列或类似的内容。我建议使用QTreeWidgetItem::setData()函数,它允许您在树窗口小部件项中存储任何内容(QVariant)。例如:

QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0, "New Folder");
[..]
int id = 1234;
double size = 12.34
child->setData(0, Qt::UserRole, id);
child->setData(0, Qt::UserRole + 1, size);

您还可以从树项中提取这些值:

int id = child->data(0, Qt::UserRole).toInt();
double size = child->data(0, Qt::UserRole + 1).toDouble();