Как установить свойство строки в QTreeWidgetItem? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть список элементов приложения, однозначно идентифицируемых по идентификатору. Их имена отображаются в виде QTreeWidget (один элемент соответствует одному QTreeWidgetItem). Я хотел бы как-то прикрепить соответствующие идентификаторы к этим QTreeWidgetItems, чтобы после изменения выбора я мог получить доступ к идентификатору соответствующего элемента и выполнить некоторую обработку.

QTreeWidgetItem не наследуется от QObject, поэтому я не могу использовать его функцию setProperty. Как я мог это сделать?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Просто создайте несколько пользовательских ролей для свойств ...

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>();
0 голосов
/ 18 сентября 2018

Знаете ли вы, что 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);
...