АЗ
Андрей ЗиминҚыр. 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, 2:16 Т.Қ.
    Реализовал модель, передал ее в QML, но при добавлении данных юзера перекидывает на начало. Есть мысль все таки гнать сами данные в QML. В связи с этим вопрос. Евгений кинте пример кода как заполняется ListModel в QML данными из QStringList!! Прям что-то не вдумаю не как это)
      АЗ
      • Қыр. 29, 2016, 2: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 листов – они зацыклены и на экране видно первый лист, ниже – начало следующего и выше – немного последний. Типа такого барабана – прокручика. И когда приходит время подгрузки новых данных ни чего не дергается, ни куда не перескакиваеи и последний лист, который чутка виден, НЕ МЕНЯЕТСЯ на новый последний, который только что пришел, а остается тем, который только что просмотрел…)) не знаю понятно ли объяснился. Ну короче работает так как у людей должно работать))

            Пікірлер

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

            C++ - Тест 001. Первая программа и типы данных

            • Нәтиже:66ұпай,
            • Бағалау ұпайлары-1
            t

            C++ - Тест 001. Первая программа и типы данных

            • Нәтиже:33ұпай,
            • Бағалау ұпайлары-10
            t

            Qt - Тест 001. Сигналы и слоты

            • Нәтиже:52ұпай,
            • Бағалау ұпайлары-4
            Соңғы пікірлер
            G
            GoattRockҚыр. 3, 2024, 11:50 Т.Қ.
            Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
            d
            dblas5Шілде 5, 2024, 9:02 Т.Қ.
            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssrАқп. 9, 2024, 5:43 Т.Ж.
            Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            АК
            Анатолий КононенкоАқп. 5, 2024, 12:50 Т.Қ.
            Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            Енді форумда талқылаңыз
            Evgenii Legotckoi
            Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            F
            FynjyШілде 22, 2024, 2:15 Т.Қ.
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
            BlinCT
            BlinCTМаусым 25, 2024, 11 Т.Ж.
            Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
            BlinCT
            BlinCTМамыр 5, 2024, 3:46 Т.Қ.
            Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
            Evgenii Legotckoi
            Evgenii LegotckoiМамыр 3, 2024, 12:07 Т.Ж.
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

            Бізді әлеуметтік желілерде бақылаңыз