Модель Qt Table к модели Tree

В Qt у меня есть база данных sqlite, которую я извлекаю. Одна из таблиц (configTable) имеет QSqlTableModel прилагается.

Таблица имеет простую двухстрочную структуру ключ / значение. Ключи представляют собой строки со значениями, подобными папкам, такими как «general / name», «general / version», «foo / bar / baz» и т. Д. Значения являются просто произвольными вариантами.

Я хотел бы отобразить эти данные в более удобном для просмотра QTreeView вместо QTableView, поскольку моя ключевая структура очень хорошо подходит для этого.

Прежде чем я буду заниматься повторной реализацией уроков и всяких сумасшедших вещей — есть ли элегантное решение для этого? И если я переопределю или расширю классы, на какие из них мне следует обратить внимание?

Спасибо.

0

Решение

Вы должны сделать разбор + отображение между списком value/value/value и модель дерева себя. Но есть (хитрый) способ Qt сделать это да.

Архитектура Qt Model-View может представлять множество различных структур данных, основанных на QAbstractItemModel учебный класс. Модель Qt должна реализовывать некоторые функции для определения представления: сколько столбцов, строк, дочерних элементов и т. Д.


Модель списка (Qt предоставляет QAbstractListModel), это в основном модель, которая говорит:

  • У меня есть один корневой элемент (все элементы данных представлены QModelIndex, root имеет неверного родителя)
  • Этот корневой элемент имеет только один столбец
  • Этот корневой элемент имеет столько строк, сколько элементов в вашем списке

Древовидная модель вернет соответствующих детей для каждого QModelIndex, Абстрактная модель Qt фактически позволяет каждому дочернему элементу быть таблицей (QModelIndex всегда есть родитель а также индекс строки-столбца).


Короче говоря, вы должны создать модель прокси (QAbstractProxyModel или подходящий подкласс, но я думаю, что он вам не нужен). Этот прокси преобразует данные вашего QSqlTableModel отправляет, и здесь вы можете сказать, что у вас есть дерево, а не список.

Ваши корневые элементы — это элементы из списка ключей вашей базы данных (первый элемент foo/bar/whatever), но вам нужно перегруппировать все корневые элементы, имеющие одинаковый ключ.

1

Другие решения

AFAIK вы можете сделать это только вручную.

По сути, потому что, как вы думаете, Qt знает, как преобразовать ваши данные в древовидную модель.

-1

По вопросам рекламы [email protected]