28 июня 2017 г. 2:46

от QT к QML

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

Возврат 10% от суммы заказа отеля на Booking
Возврат 10% от суммы заказа отеля на Booking
Предлагаем ссылку с 10% возвратом от суммы заказа при бронировании отеля через Booking
6
  • 29 июня 2017 г. 6:22
  • Ответ был помечен как решение.

Сам себе напишу ответ. Может быть кому-то пригодится.. Все делается также через контекст.
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 }
                }
0

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

0

Добрый день.

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

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

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

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

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

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>"
                }
0

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

0
v

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
19 июля 2019 г. 9:51
Anastasia Dutchina

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

  • Результат:53баллов,
  • Очки рейтинга-4
AD
19 июля 2019 г. 9:46
Anastasia Dutchina

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

  • Результат:57баллов,
  • Очки рейтинга-2
DZ
19 июля 2019 г. 5:01
Damira Zholdasbay

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

  • Результат:60баллов,
  • Очки рейтинга-1
Последние комментарии
19 июля 2019 г. 15:29
IscanderChe

Спасибо, уже разобрался по оригинальной статье на GitHub, всё заработало. Я просто хотел мягко намекнуть, что без этой информации ваша статья явно неполная.
19 июля 2019 г. 15:16
Ruslan Polupan

Вот ссылка по работе с ключами и GitHub https://exlmoto.ru/git-and-qt-creator/#31 Сгенерируй новый ключ и добваь его на GitHub.
19 июля 2019 г. 15:03
IscanderChe

В какой статье? Какой ключ? Как добавить? Ничего не понятно. :) Если из этой , то как понять, какой дефолтный у меня агент SSH.
19 июля 2019 г. 13:43
Ruslan Polupan

Ключ не верный или не действительный. сформируй новый и добавь на GitHub В статье описапно как сделать.
19 июля 2019 г. 12:55
IscanderChe

У меня ошибка случилась ещё до Qt Creator, я ж написал. На этапе загрузки проекта из командной строки на GitHub.
Сейчас обсуждают на форуме
19 июля 2019 г. 10:55
Михаиллл

Да. Там похоже каждое устройство генерирует свой токен, этот токен нужно как то получать и использовать в запросе. Но как это делать я пока не понял.
19 июля 2019 г. 10:52
Михаиллл

Суть понятна, но не понятно где и как это использовать. Как я понимаю для начала нужно получить координату на поле и находящийся эллемент на этой координате в этой части кода void Mov...
19 июля 2019 г. 9:31
Михаиллл

Добрый день. Повернул ListView в горизонтальное положение. При прокрутке эллементы выстраиваются у левого края окна. Как в QMK в ListView сделать центрирование по центру? ...
b
18 июля 2019 г. 2:27
bbb116

Когда отрисовки не видно, объекты AreaSelector создаются (при нажатии и движении мышкой), но почему то не срабатывает paint() у них, хотя делаю update этой области. Причем эти области мо...
17 июля 2019 г. 5:54
Алексей Внуков

хочу не стандартный набор символов, а все ненужное убрать чтоб не мешало. для начала решил посмотреть как работает клава на родном примере, а он на телефоне не взлетел вот и начал разби...
Ищу работу?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

EVILEG
О нас
Услуги
Присоединяйтесь к нам
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB