Представьте свойства элемента QAbstractListModel в QML в Qt 5.0

Я свободно следил за статьей Блог Кристофа Думеза получить пользовательский класс QAbstractListModel для представления данных интерфейсу QML (QtQuick2) (QtQuick2ApplicationViewer). Однако, поскольку я использую Qt 5.0.0 (и MSVC2012), некоторые части его статьи не применяются. Например, конструктор ListModel больше не должен вызывать setRoleNames(), так как setRoleNames() был амортизирован в Qt 5.

ListModel::ListModel(ListItem* prototype, QObject *parent) :
QAbstractListModel(parent), m_prototype(prototype)
{
setRoleNames(m_prototype->roleNames());
}

Насколько я понимаю, класс, который наследуется от QAbstractListModel, должен определять только roleNames(), поскольку она была изменена на Qt 5 как чисто виртуальная функция, поэтому в его примере я просто закомментирую setRoleNames(m_prototype->roleNames()); в конструкторе и все должно работать. Правильно?

Но вместо этого все определенные роли не определены при доступе через QML. Я могу проверить имена в C ++ с этим:

QHash<int, QByteArray> mynames = model->find("Elephant")->roleNames();
qDebug() << "Model: " << mynames;

В этом случае имена ролей для объекта Elephant печатаются как положено.

Верны ли мои предположения, или мне нужно сделать что-то еще, чтобы получить объект QAbstractListModel для совместного использования свойств элемента списка с QML2? Это кажется глупым вопросом, но документы на Qt5 сейчас так не работают, что я не могу понять.

Спасибо!

3

Решение

Вам нужно переопределить QAbstractListModel::roleNames() const метод и ваши роли автоматически регистрируются в QML.

Есть рабочий пример предоставления QML модели, основанной на QAbstractListModel, в examples / quick / modelviews / abstractitemmodel.

Вы также можете рассмотреть возможность использования QQmlListProperty.

9

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector