Попытался сделать простую модель данных на чистом QML, сразу столкнулся с несколькими трудностями. Забегая вперед хочу поинтересоваться как кто решал эту проблему, если вообще пытался?
1. Она должна быть синглтоном, как его создать в QML?
Сейчас сделал отдельный stateless JS файл и там создал объект модели таким образом:
DataModel.jsvar component = Qt.createComponent("FavoritesModel.qml");
var favs = component.createObject(null, {});
Соответственно в коде использую так:
import "DataModel.js" as Model
...
Model.favs.addFav("adasdasd")
Тут вроде бы всё хорошо, но не работает кододополнялка в редакторе вообще.
2. Модель объявил так:
FavoritesModel.jsimport QtQuick 2.0
QtObject {
property var model: ListModel {}
function addFav(title)
{
model.append({"title": title});
}
}
Лаконично и красиво. С ListView вроде бы работает как полагается. Но возникла проблема с сохранением данных в локальное хранилище.
3. Сохранение в локальное хранилище:
Сперва хотел использовать для этой цели Settings (Qt.labs.settings 1.0), т.к. оно по идее имеется в QtCore и никаких жирностей дополнительно не тащится. Но попытка объявить объект Settings внутри объекта модели сразу приводит к неработоспособности, выдается ошибка: QQmlComponent: Component is not ready. Пляски с бубном не помогли. Надо только объявлять Settings в другом файле, руками формировать свойства и присваивать их из модели в Settings.
В общем не очень красиво, и сразу увеличивает количество кода.
Вариант с QtQuick.LocalSettings мне тоже не нравится, нет вообще никакой декларативности, надо писать SQL запросы, апдейтить схему БД, тащится жирный sqlite на все платформы включая телефонные и опять таки много кода..
Вот этот пункт самый геморройный получается и очень меня удручает.