Использование модели дерева Qt для хранения данных? - PullRequest
1 голос
/ 06 января 2020

В настоящее время:

Я создал и заполнил QTreeWidget с помощью QTreeWidgetItems и установил текст QTreeWidgetItems

Проблема: я понятия не имею как на самом деле использовать QTreeWidgetItems для хранения данных

Глядя на: https://doc.qt.io/qt-5/qt.html#ItemDataRole -enum

void QTreeWidgetItem::setData(int column, int role, const QVariant &value)

Я вижу, что я могу использовать Qt: : ItemDataRole для указания типа хранимых данных, но ни один из параметров в перечислении не относится к фактическому хранению необработанных данных, только свойства Qt.

Вопросы:

  • Как мне хранить фактические данные, такие как удвоенные, в WTreeWidgetItem?
  • Если я не должен на самом деле хранить данные в элементах дерева, нужно ли мне использовать вспомогательную структуру и использовать модельные индексы с внутренние указатели, чтобы связать 2 вместе?

Информация:

  • Qt5 (c ++)
  • MSV C 15 2017 + Qt Designer

1 Ответ

1 голос
/ 06 января 2020

Вы можете сохранить типы, поддерживаемые QVariant, и, если это не поддерживается, Qt указывает правила для новых типов, которые должны поддерживаться, в случае двойных значений это поддерживается, поэтому для сохранения используйте метод setData, чтобы указать и использовать неиспользуемая роль по умолчанию, такая как Qt :: UserRole.

float data = 5.0;
int column = 0
item->setData(column, Qt::UserRole, data);

И для получения данных вы должны преобразовать QVariant, полученный методом data () QTreeWidgetItem:

int column = 0
QVariant v = item->data(column, Qt::UserRole);
float value = v.toFloat(); // or v.value<float>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...