如何将字符串属性设置为QTreeWidgetItem?

时间:2018-09-18 11:24:44

标签: c++ qt qtreewidget qtreewidgetitem

我有一个由ID唯一标识的应用程序特定项目的列表。它们的名称显示在QTreeWidget中(一项对应于一个QTreeWidgetItem)。我想以某种方式将相应的ID附加到这些QTreeWidgetItems上,以便在更改选择时可以访问相应项的ID并进行一些处理。

QTreeWidgetItem不继承自QObject,因此我无法使用其setProperty函数。我该怎么办?

2 个答案:

答案 0 :(得分:4)

只需为属性创建一些用户定义的roles ...

typedef enum {
  id_1_role = Qt::UserRole,
  id_2_role,

  id_N_role,
} property_id_role;

然后,您可以使用常规方法来获取/设置与QTreeWidgetItem相关联的数据。

QTreeWidgetItem *item = ...

/*
 * Set the property value.
 */
item->setData(column, property_id_role::id_2_role, id_2_value);

/*
 * Get the property value.
 */
auto id_2_value = item->data(column, property_id_role::id_2_role).value<id_2_type>();

答案 1 :(得分:3)

您知道QTreeWidgetItem具有setData方法吗?

setData(int column, int role, const QVariant &value)

您可以将其与您的角色一起使用。例如:

int your_id = 123;
ui->treeWidget->currentItem()->setData(0,Qt::UserRole,your_id);
qDebug() << ui->treeWidget->currentItem()->data(0,Qt::UserRole);