А кто-нибудь делал иерархические модели на C++ для использования их

в QML?

Накостылил ListView, который умеет показывать дочерние элементы для каждого элемента (по сути - это дерево с глубиной 2). Для отладки использовал модель в QML примерно такую:

ListModel {
ListElement {
foo: "hello"
bar: "lalala"
subItems: [
ListElement {...},
ListElement {...},
]
}
}

В ListView в делегате соответственно показываю ещё один ListView в котором моделью задаются subItems. Это работает, но теперь мне надо запилить полноценную динамическую модель в C++ и вот тут какая-то печаль. Как это лучше сделать?

В доке https://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html#qabstractitemmodel-subclass

написано:

QAbstractItemModel presents a hierarchy of tables, but the views currently provided by QML can only display list data. In order to display the child lists of a hierarchical model, use the DelegateModel QML type, which provides the following properties and functions to be used with list models of QAbstractItemModel type

Посмотрел DelegateModel, ничего не понял, куда как это пихать, при чём тут С++. Допустим, сделаю я в С++ свою модель на базе QAbstractItemModel, а дальше что? Как это в QML использовать? Документация вообще немногословна.

15 ответов

17 просмотров

ну у меня самодельная модель в которой реализованы сворачивания столбцов

Мгер Карапетян
screenshot ну у меня самодельная модель в которой реализованы...

я не использовал Qtшные родитель-дочерние индексы, а просто следил за состоянием каждого из столбцов

Мгер Карапетян
я не использовал Qtшные родитель-дочерние индексы,...

ну и сам по ролям спрашивал является ли строка/столбец шиной, если да, то в каком состоянии и тд

что то было. делал через ListView и Loader

ep- Автор вопроса
Мгер Карапетян
screenshot ну у меня самодельная модель в которой реализованы...

У меня сворачивание строк сделано в моём View (делегате), там через Loader загружается другой ListView в который передаётся subItems Loader { id: subItemLoader visible: !column.collapsed sourceComponent: subListViewComponent } Я не очень понимаю как мне модель в C++ сделать, чтобы работать с ней в QML, чтобы использовать возможности иерархической С++ модели. Сейчас с моком в QML всё просто, subItems - это по сути роль, хранит просто список ListElement.

ep- Автор вопроса
mefest
что то было. делал через ListView и Loader

У меня тоже Loader используется, но я не догоняю как модель на базе QAbstractItemModel к этому прикрутить.

ep
У меня тоже Loader используется, но я не догоняю к...

может по какому нибудь роле возвращать указатель на модель?

ep- Автор вопроса
Мгер Карапетян
может по какому нибудь роле возвращать указатель н...

Я так хотел, типа роль subItems, пихаем в неё ещё один экземпляр модели. Но так не получится, там же QVariant, а в QVariant нельзя положить свою кастомную модель, потому что она наследуется от QObject

ep
Я так хотел, типа роль subItems, пихаем в неё ещё ...

https://doc.qt.io/qt-5/qvariant.html#setValue — да наверное можно пихнуть в QVariant модель

ep- Автор вопроса
Мгер Карапетян
https://doc.qt.io/qt-5/qvariant.html#setValue — да...

Q_DECLARE_METATYPE(MyCustomModel) не сработает, не скомпилируется, потмоу что QObject не может быть скопирован.

ep- Автор вопроса
ep
А модель как делал?

у меня не было иерархической. была обычная list модель. а Loader так же загружал свою listView со своей моделью

ep- Автор вопроса
mefest
у меня не было иерархической. была обычная list мо...

А как доступ к этой суб-модели был организован? Через роль (поле) в родительской?

ep
А как доступ к этой суб-модели был организован? Че...

ну да, там делался запрос с выборкой по родителю. решение так себе в идеале надо смотреть как сделаны вьюшки в qml и городить свою treeView

Похожие вопросы

Обсуждают сегодня

Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Всем привет, может кто знает нормальных иностранных хостинг провайдеров. Что бы по качеству аналогичные netangels, beget, timeweb?
Black Cat
4
Добрый день , слышали про то что XML схемы https://schemas.xmlsoap.org/soap/envelope/ перестали работать со поза-вчера. А домен https://schemas.xmlsoap.org/ , отвечает 404 оши...
Max Dubovsky
3
Второй вопрос: снимаются ли эти ограничения при покупке на fragment хрени за кучу денег? (до 4096 / 2048)
Артем Уколов
3
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Карта сайта