АЗ
Андрей Зимин28 сентября 2016 г. 8:13

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

qml, QStringList, QVariant

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

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

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

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

Как я думаю:

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

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

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

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

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

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

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

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 28 сентября 2016 г. 9:21

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

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

    АЗ
    • 29 сентября 2016 г. 14:16
    Реализовал модель, передал ее в QML, но при добавлении данных юзера перекидывает на начало. Есть мысль все таки гнать сами данные в QML. В связи с этим вопрос. Евгений кинте пример кода как заполняется ListModel в QML данными из QStringList!! Прям что-то не вдумаю не как это)
      АЗ
      • 29 сентября 2016 г. 14:22
      Ну т.е. как на стороне плюсов реализовать модель с данными пршедшими в QStringList – понятно, а как это реализовывается на стороне QML. Просто куча примеров реализации, но только с конкретными и не многими данными . Ну т.е. например создают руками три ListElement и пишут в них данные там же руками, а вот как их туда из QStringList подтянуть?
        Evgenii Legotckoi
        • 30 сентября 2016 г. 3:56
        Через сигнал из C++ модели. То есть сделать Connections к объекту, который отвечает за получение данных, а потом распарсить его уже в QML. А вообще, Вы пробовали фейковые данные подгружать в QML для начала? А то может быть там такая же проблема будет.
          АЗ
          • 30 сентября 2016 г. 4: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 листов – они зацыклены и на экране видно первый лист, ниже – начало следующего и выше – немного последний. Типа такого барабана – прокручика. И когда приходит время подгрузки новых данных ни чего не дергается, ни куда не перескакиваеи и последний лист, который чутка виден, НЕ МЕНЯЕТСЯ на новый последний, который только что пришел, а остается тем, который только что просмотрел…)) не знаю понятно ли объяснился. Ну короче работает так как у людей должно работать))

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            AD

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:50баллов,
            • Очки рейтинга-4
            m
            • molni99
            • 26 октября 2024 г. 8:37

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:80баллов,
            • Очки рейтинга4
            m
            • molni99
            • 26 октября 2024 г. 8:29

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:20баллов,
            • Очки рейтинга-10
            Последние комментарии
            i
            innorwall12 ноября 2024 г. 5:12
            Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
            i
            innorwall12 ноября 2024 г. 1:23
            QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
            i
            innorwall11 ноября 2024 г. 22:50
            Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
            i
            innorwall11 ноября 2024 г. 21:19
            Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
            i
            innorwall11 ноября 2024 г. 20:55
            PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
            Сейчас обсуждают на форуме
            i
            innorwall12 ноября 2024 г. 3:56
            добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
            i
            innorwall11 ноября 2024 г. 17:55
            Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
            9
            9Anonim25 октября 2024 г. 16:10
            Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
            ИМ
            Игорь Максимов3 октября 2024 г. 11:05
            Реализация навигации по разделам Спасибо Евгений!

            Следите за нами в социальных сетях