Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разработка приложений на C++_Практическая работа №8

.pdf
Скачиваний:
0
Добавлен:
07.06.2025
Размер:
950.87 Кб
Скачать

Модуль 2. Расширенные возможности Qt Quick

Тема 2.5. Модели Практика

1

1. XmlListModel

Получить и отобразить курсы валют в виде списка из ресурса ЦБ РФ по адресу http://www.cbr.ru/scripts/XML_daily.asp

Для решения данной задачи будет использовано XmlListModel.

Добавить в .pro файлы:

QT += xmlpatterns

// MainPage.qml import QtQuick 2.0 import Sailfish.Silica 1.0

import QtQuick.XmlListModel 2.0

Page {

objectName: "mainPage" allowedOrientations: Orientation.All

XmlListModel {

id: exchangeRatesModel

source: "http://www.cbr.ru/scripts/XML_daily.asp" // URL to the XML data source

query: "/ValCurs/Valute"

XmlRole { name: "name"; query: "Name/string()" } XmlRole { name: "charCode"; query: "CharCode/string()" } XmlRole { name: "nominal"; query: "Nominal/string()" } XmlRole { name: "value"; query: "Value/string()" } onStatusChanged: {

2

if (status === XmlListModel.Ready) { console.log("Got", count, "exchange rates");

} else if (status === XmlListModel.Error) { console.error("Error loading exchange rates:", errorString());

}

}

}

ListView {

anchors.fill: parent

model: exchangeRatesModel spacing: 160

delegate: Item { width: parent.width height: 60

Column {

Text { text: "Name: " + name }

Text { text: "Code: " + charCode }

Text { text: "Nominal: " + nominal }

Text { text: "Value: " + value }

}

}

}

}

Для получения и отображения курсов валют в виде списка можно использовать компонент XmlListModel, который позволяет парсить и отображать данные из xml-файла.

3

Сначала создадим объект XmlListModel и укажем адрес ресурса ЦБ РФ,

откуда будем получать данные.

Мы указали запрос "/ValCurs/Valute", что означает, что мы хотим получить данные из элементов "Valute" внутри элемента "ValCurs".

Мы указали, что модель для элемента ListView будет объект

XmlListModel, а делегатом будет элемент Text, который будет отображать название валюты и ее курс в рублях.

В итоге, чтобы получить и отобразить курсы валют в виде списка из ресурса ЦБ РФ, нам понадобится только эти два элемента: XmlListModel и ListView.

1. Repeater

Рассмотрим пример использования Repeater с моделью-числом.

import QtQuick 2.0 import Sailfish.Silica 1.0

Page {

objectName: "mainPage" allowedOrientations: Orientation.All

Rectangle { width: 400 height: 400

anchors.centerIn: parent color: "lightgreen"

Repeater {

model: 4

4

Rectangle { width: 100 height: 100 color: "pink" x: index * 50 y: index * 100

}

}

В этом примере мы создаем простой прямоугольник и используем

Repeater для повторения квадратов розового цвета по горизонтали. При этом мы задаем модель-число, равное 4, для указания того, что нужно создать 4

экземпляра компонента Rectangle. Затем мы определяем компонент, который будет повторяться, и задаем ему ширину, высоту, цвет и позицию по X.

5

Обратите внимание, что мы задаем позицию X используя свойство index,

которое представляет индекс текущего элемента в модели-числе. Так как ширина квадрата равна 50, мы задаем X для каждого экземпляра с помощью формулы index * 50.

6

Модуль 2. Расширенные возможности

Qt Quick

Тема 2.6. Представления Практика

1

1. ListView

Создать приложение, которое позволяет отображать список

(ListView) из прямоугольников (Rectangle) с использованием компонента ListModel в качестве модели. Модель должна содержать информацию о цвете фона прямоугольника, тексте,

отображаемом в прямоугольнике и цвете текста. Текст должен содержать название цвета фона прямоугольника.

Для начала нужно создать компонент RectItem.qml, который будет отображать каждый прямоугольник списка. В этом компоненте объявим свойства, которые будут содержать информацию о цвете фона, тексте и цвете текста прямоугольника:

RectItem.qml

Rectangle {

property color bgColor property string text property color textColor

width: 100 height: 50 color: bgColor

Text {

text: text

color: textColor anchors.centerIn: parent

}

}

2

Затем создадим модель RectListModel.qml, которая будет хранить список прямоугольников. Для этого воспользуемся стандартным QML

компонентом ListModel. Также объявим переменную colors, которая будет содержать доступные цвета фона прямоугольников:

RectListModel.qml import QtQuick 2.0 import Sailfish.Silica 1.0

ListModel {

ListElement { bgColor: "red"; text: "красный"; textColor: "white" } ListElement { bgColor: "green"; text: "зеленый"; textColor: "white" } ListElement { bgColor: "blue"; text: "синий"; textColor: "white" } ListElement { bgColor: "yellow"; text: "желтый"; textColor: "black" } ListElement { bgColor: "orange"; text: "оранжевый"; textColor: "white" }

property var colors: ["red", "green", "blue", "yellow", "orange"]

}

Теперь осталось создать основной компонент MainPage.qml. В нем объявим ListView, который будет отображать список прямоугольников. Для модели этого ListView укажем нашу RectListModel. В качестве delegate для каждого элемента списка будем использовать компонент RectItem.

MainPage.qml import QtQuick 2.0 import Sailfish.Silica 1.0

Page {

objectName: "mainPage"

3

allowedOrientations: Orientation.All

Rectangle { width: 600 height: 700

color: "lightgrey"

ListView {

anchors.fill: parent

model: RectListModel {} delegate: RectItem {

bgColor: model.bgColor text: model.text

textColor: model.textColor

}

}

}

}

Теперь приложение должно отображать список прямоугольников с заданными цветом фона, текстом и цветом текста. Текстом каждого прямоугольника будет название его цвета фона.

4