Russian Qt Forum
Ноябрь 01, 2024, 06:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с созданием модели данных на чистом QML  (Прочитано 3432 раз)
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Май 16, 2014, 11:37 »

Попытался сделать простую модель данных на чистом QML, сразу столкнулся с несколькими трудностями. Забегая вперед хочу поинтересоваться как кто решал эту проблему, если вообще пытался?

1. Она должна быть синглтоном, как его создать в QML?

Сейчас сделал отдельный stateless JS файл и там создал объект модели таким образом:

DataModel.js
Код:
var component = Qt.createComponent("FavoritesModel.qml");
var favs = component.createObject(null, {});

Соответственно в коде использую так:

Код:
import "DataModel.js" as Model

...

Model.favs.addFav("adasdasd")

Тут вроде бы всё хорошо, но не работает кододополнялка в редакторе вообще.

2. Модель объявил так:

FavoritesModel.js
Код:
import 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 на все платформы включая телефонные и опять таки много кода..

Вот этот пункт самый геморройный получается и очень меня удручает.
Записан

Гугль в помощь
NKovalev64
Гость
« Ответ #1 : Май 20, 2014, 23:08 »

Просто не нужно делать модели на js\qml - и проблемы не будет!
О балансе QML vs C++ можно послушать\посмотреть здесь:
http://tech.yandex.ru/events/yagosti/cpp-user-group/talks/1792/
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Май 24, 2014, 18:37 »

Проблему с Settings  я победил, и все вроде бы ок. Но, в итоге, остановился на плюсовой реализации модели, как-то комфортнее писать, больше возможностей по работе с типами.

Но есть такие области (всякие плазмоиды), когда надо модель городить в QML и это можно сделать как показала практика.
Записан

Гугль в помощь
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.124 секунд. Запросов: 24.