2015-08-25 3 views
0

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

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

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

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

спасибо.

ответ

0

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

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

0

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

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


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

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

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


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

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

 Смежные вопросы

  • Нет связанных вопросов^_^