АЗ
Қыр. 28, 2016, 6:13 Т.Қ.

Частичная передача данных

qml, QStringList, QVariant

Евгений добрый день.

Пытаюсь решить такую задачу.

Мне с сервера приходит QVariant. В котором хранятся QStringList. Каждый QStringList – это отдельное видео с параметрами, картинка, описание, заголовок и т.п.

Этот QVariant я раскладываю на разные QStringList соответственно нужным параметрам делегата. Ну т.е. список с датой, список с картинками, список с описанием и т.п.

Как я думаю:

на плюсах создаю модель впихнув эти самые списки и отправляю ее в QML. И это вреде как, даже по науке так надо. Типа пришло в плюсы там и делай модель, где это видел не помню… теорию эту. Ну да ладно.

Дальше юзер мотает список с видео, в какой-то момент происходит отправка сигнала на сервер – мол давай еще видео. Сервер присылает эти видосы в новом QVariant.

Дальше есть два пути, как я думаю.

Первый – к уже имеющемуся QVariant прибавить вновь прибывший создать новую модель и отправить ее в QML.

Второй – только из новых данных создать новую модель и отправить ее в QML и там уже делать прибавление.

Посоветуйте как умнее чтоли реализовать.

И не будет ли такого что при прибавление к уже имеющейся моделе, список начнется с начала и юзера перекинет на начало списка?

p/s либо вообще не делать модель на плюсах, а гнать данные в QML и там уже делать модель, но это вроде как не верное решение, да и плюсы то пошустрее будут.

0

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

5
Evgenii Legotckoi
  • Қыр. 28, 2016, 7:21 Т.Қ.

Добрый день.
Первый вариант однозначно лучше. Только не то, чтобы создавать новую модель. Нужно реализовать метод с добавлением данных к существующей модели. Это будет наиболее правильный вариант.
А насчёт того, не придётся ли пользователю перелистывать всё заново, то здесь нужно озаботиться наличием текущего индекса, который например будет, что-то вроде центрального видео на экране. То есть после подгрузки данных выставлять на этом видео фокусировку. Но это только в том случае, если эта проблема будет существовать.
Реализуйте для начала добавление данных в модель при получении новых данных, а там уже видно будет.

Насчёт P/S/ ДубльГис вроде как полностью перешли на QML в последних версиях, да и QML стал пошустрее с последними версиями, так что вполне возможно, что разница будет и не заметна. Но я, конечно, говорю только про последнюю версию Qt.

    АЗ
    • Қыр. 30, 2016, 12:16 Т.Ж.
    Реализовал модель, передал ее в QML, но при добавлении данных юзера перекидывает на начало. Есть мысль все таки гнать сами данные в QML. В связи с этим вопрос. Евгений кинте пример кода как заполняется ListModel в QML данными из QStringList!! Прям что-то не вдумаю не как это)
      АЗ
      • Қыр. 30, 2016, 12:22 Т.Ж.
      Ну т.е. как на стороне плюсов реализовать модель с данными пршедшими в QStringList – понятно, а как это реализовывается на стороне QML. Просто куча примеров реализации, но только с конкретными и не многими данными . Ну т.е. например создают руками три ListElement и пишут в них данные там же руками, а вот как их туда из QStringList подтянуть?
        Evgenii Legotckoi
        • Қыр. 30, 2016, 1:56 Т.Қ.
        Через сигнал из C++ модели. То есть сделать Connections к объекту, который отвечает за получение данных, а потом распарсить его уже в QML. А вообще, Вы пробовали фейковые данные подгружать в QML для начала? А то может быть там такая же проблема будет.
          АЗ
          • Қыр. 30, 2016, 2:28 Т.Қ.
          • Жауап шешім ретінде белгіленді.

          ёёё)) Бугагашечка)). Вопорс вообще снят. Чет я тупанул. QML конечно крут))Проблемма решена полностью и с подгрузкой и с отображением там где надо и как надо.

          Сделал так.

          Данные из с++ в виде QStringList передаем в сигнале в QML. Сигнал этот испускается тогда, когда пришли данные с сервера. Дальше еще проще)) в QML делаем вообще пустую ListModel с одним только айдишником.
          Далее в листвью в кумэль определяем поля делегата и в методе onCurrentIndexChanged ставим условие о том что при показе на экране предпоследней (это у меня так… а там кому как удобней) страницы вызываем из плюсового класса метод запроса новых данных от сервера в который и передаем те параметры по которым нам надо получить данные.

          Эти данные пришли с сервера и вот снова наш сигнал описанный в начале испускается. И в нем есть таое дело:
          var i;
          for(i = 0; i < list.leght; i++) {
          model.append({“name” : list});
          }

          где:
          name – переменная которая идет в поле делегата
          list – данные из с++. Ответ от сервера.

          Я не знаю, может у меня конечно интернет мощьный через вифи, проверяю на мобилке – круто)) Я еще список сделал не List а Path – и зациклил его. Т.е. на экране видно сразу последний элемент спсика. Так вот –
          Например у меня 5 листов – они зацыклены и на экране видно первый лист, ниже – начало следующего и выше – немного последний. Типа такого барабана – прокручика. И когда приходит время подгрузки новых данных ни чего не дергается, ни куда не перескакиваеи и последний лист, который чутка виден, НЕ МЕНЯЕТСЯ на новый последний, который только что пришел, а остается тем, который только что просмотрел…)) не знаю понятно ли объяснился. Ну короче работает так как у людей должно работать))

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз