В Qt у меня есть база данных sqlite, которую я извлекаю. Одна из таблиц (configTable) имеет QSqlTableModel
прилагается.
Таблица имеет простую двухстрочную структуру ключ / значение. Ключи представляют собой строки со значениями, подобными папкам, такими как «general / name», «general / version», «foo / bar / baz» и т. Д. Значения являются просто произвольными вариантами.
Я хотел бы отобразить эти данные в более удобном для просмотра QTreeView
вместо QTableView
, поскольку моя ключевая структура очень хорошо подходит для этого.
Прежде чем я буду заниматься повторной реализацией уроков и всяких сумасшедших вещей — есть ли элегантное решение для этого? И если я переопределю или расширю классы, на какие из них мне следует обратить внимание?
Спасибо.
Вы должны сделать разбор + отображение между списком value/value/value
и модель дерева себя. Но есть (хитрый) способ Qt сделать это да.
Архитектура Qt Model-View может представлять множество различных структур данных, основанных на QAbstractItemModel
учебный класс. Модель Qt должна реализовывать некоторые функции для определения представления: сколько столбцов, строк, дочерних элементов и т. Д.
Модель списка (Qt предоставляет QAbstractListModel
), это в основном модель, которая говорит:
QModelIndex
, root имеет неверного родителя)Древовидная модель вернет соответствующих детей для каждого QModelIndex
, Абстрактная модель Qt фактически позволяет каждому дочернему элементу быть таблицей (QModelIndex
всегда есть родитель а также индекс строки-столбца).
Короче говоря, вы должны создать модель прокси (QAbstractProxyModel
или подходящий подкласс, но я думаю, что он вам не нужен). Этот прокси преобразует данные вашего QSqlTableModel
отправляет, и здесь вы можете сказать, что у вас есть дерево, а не список.
Ваши корневые элементы — это элементы из списка ключей вашей базы данных (первый элемент foo/bar/whatever
), но вам нужно перегруппировать все корневые элементы, имеющие одинаковый ключ.
AFAIK вы можете сделать это только вручную.
По сути, потому что, как вы думаете, Qt знает, как преобразовать ваши данные в древовидную модель.