alex_lip
alex_lip28. Juni 2017 02:46

от QT к QML

Добрый день.
Большое спасибо вам за ваши уроки.  Можете смело издавать книгу "100 первых уроков для QT/QML".
Теперь вопрос. Я сделал на QT разбор JSON файла (который я получаю с сайта при помощи networkadapter). Получил таблицу. На QT все работает. Теперь хочу эту таблицу показать в слое QML.
Благодаря уроку сигналы и слоты в QML передал в слой QML  одну ячейку из этой таблицы в текстовое поле. Все хорошо.
Но теперь "завис" никак не пойму как мне на основе разобранного JSON файла создать модель и передать ее на слой QML например в ListView. Количество полей мне заранее известно. Урок с примером Передача данных из QSqlQueryModel в Qml TableView для меня оказался слишком сложным. Можете на каком-то более простом примере пояснить?

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

6
alex_lip
  • 29. Juni 2017 06:22
  • Die Antwort wurde als Lösung markiert.

Сам себе напишу ответ. Может быть кому-то пригодится.. Все делается также через контекст.
QT

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);
 
    QStringList dataList;
    dataList.append("Item 1");
    dataList.append("Item 2");
    dataList.append("Item 3");
    dataList.append("Item 4");
 
    QQmlApplicationEngine engine;
 
    AppCore appCore;
    QQmlContext *context=engine.rootContext();
    context->setContextProperty("appCore", &appCore);
 
    context->setContextProperty("myModel", QVariant::fromValue(dataList));
 
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));
 
    return app.exec();
}


QML

 ListView {
                width: 100; height: 100
 
                model: myModel
                delegate: Rectangle {
                    height: 25
                    width: 100
                    Text { text: modelData }
                }
    alex_lip
    • 29. Juni 2017 06:25

    Единственно что непонятно - какого хрена в QtQuick.Controls 2.0 нет объекта TableView (в 1.4 - он есть!)
    Как мне таблицу рисовать - непонятно...

      Evgenii Legotckoi
      • 30. Juni 2017 14:04

      Добрый день.

      Угораздило вас спросить, пока я был в переезде в другую страну.

      Вы молодец, нормальное решение.

      Что касается TableView, то я тоже был огорчён, когда увидел, что TableView отсутствует. Выкрутиться можно несколько иначе. Сделать Delegate для ListView, который будет формировать строку и оформление этой строки. Например вот в статье есть delegate для ListView в QML. Полагаю, что возможность рисования своего делегата для строки в ListView и сподвигло разработчиков не заморачиваться с отдельным TableView . Хотя это и прискорбно.

      Делегат подчиняется всем правилам вёрстки в QML, так что это просто дополнительный графический компонент, который нужно сверстать.

        Это возможно удивит, а может и нет))) так тоже работает:

        Text {
                            id: page_text
                            anchors.fill: parent
                            textFormat: Text.RichText
                            text: "<table border=\"1\">
        <caption>Таблица размеров обуви</caption>
        <tr>
        <th>Россия</th>
        <th>Великобритания</th>
        <th>Европа</th>
        <th>Длина ступни, см</th>
        </tr>
        <tr><td>34,5</td><td>3,5</td><td>36</td><td>23</td></tr>
        <tr><td>35,5</td><td>4</td><td>36⅔</td><td>23–23,5</td></tr>
        <tr><td>36</td><td>4,5</td><td>37⅓</td><td>23,5</td></tr>
        <tr><td>36,5</td><td>5</td><td>38</td><td>24</td></tr>
        <tr><td>37</td><td>5,5</td><td>38⅔</td><td>24,5</td></tr>
        <tr><td>38</td><td>6</td><td>39⅓</td><td>25</td></tr>
        <tr><td>38,5</td><td>6,5</td><td>40</td><td>25,5</td></tr>
        <tr><td>39</td><td>7</td><td>40⅔</td><td>25,5–26</td></tr>
        <tr><td>40</td><td>7,5</td><td>41⅓</td><td>26</td></tr>
        <tr><td>40,5</td><td>8</td><td>42</td><td>26,5</td></tr>
        <tr><td>41</td><td>8,5</td><td>42⅔</td><td>27</td></tr>
        <tr><td>42</td><td>9</td><td>43⅓</td><td>27,5</td></tr>
        <tr><td>43</td><td>9,5</td><td>44</td><td>28</td></tr>
        <tr><td>43,5</td><td>10</td><td>44⅔</td><td>28–28,5</td></tr>
        <tr><td>44</td><td>10,5</td><td>45⅓</td><td>28,5–29</td></tr>
        <tr><td>44,5</td><td>11</td><td>46</td><td>29</td></tr>
        <tr><td>45</td><td>11,5</td><td>46⅔</td><td>29,5</td></tr>
        <tr><td>46</td><td>12</td><td>47⅓</td><td>30</td></tr>
        <tr><td>46,5</td><td>12,5</td><td>48</td><td>30,5</td></tr>
        <tr><td>47</td><td>13</td><td>48⅔</td><td>31</td></tr>
        <tr><td>48</td><td>13,5</td><td>49⅓</td><td>31,5</td></tr>
        </table>"
                        }
        

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

            ВА
            • 27. Juni 2019 04:53
            • (bearbeitet)

            Да это так... просто какого было мое удивление, хоть и поддерживается html на уровне 4-ки можно не тянуть тяжеловесный WebEngine в ряде случаев, например для печати данных в табличном виде, ведь таблицы бывают сложными, html в этом случае палочка выручалочка, единственно не смог повернуть текст в ячейке на 90 градусов:(
            Может както и можно, буду рад узнать.
            Такой вариант не канает:

            <p  style="transform: rotate(-90deg);">Техн.<br>треб.</p>
            
            • может еще актуально, нашел на гитхабе на 2-х контролах Таблицу:
              https://github.com/valeksan/QMLTable
              Правда не успел опробывать, отпишетесь если понравится, там и мои контролы есть, на моей странице:)

              Kommentare

              Nur autorisierte Benutzer können Kommentare posten.
              Bitte Anmelden oder Registrieren
              Letzte Kommentare
              A
              ALO1ZE19. Oktober 2024 08:19
              Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
              ИМ
              Игорь Максимов5. Oktober 2024 07:51
              Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
              d
              dblas55. Juli 2024 11:02
              QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
              k
              kmssr8. Februar 2024 18:43
              Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
              Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
              Jetzt im Forum diskutieren
              J
              JacobFib17. Oktober 2024 03:27
              добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
              JW
              Jhon Wick1. Oktober 2024 15:52
              Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
              КГ
              Кирилл Гусарев27. September 2024 09:09
              Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
              F
              Fynjy22. Juli 2024 04:15
              при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

              Folgen Sie uns in sozialen Netzwerken