А кто-нибудь делал иерархические модели на 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 ответов

49 просмотров

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

Мгер Карапетян
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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта