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

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

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

Модуль 3 Тема 3.6

1

Приведите пример кода с созданием масштабируемого интерфейса.

Интерфейс необходимо создавать на основе dip (независимых от

плотности пикселей).

import QtQuick 2.0 import Sailfish.Silica 1.0

Page {

objectName: "mainPage" allowedOrientations: Orientation.All Text {

id: text1

width: Theme.dp(100) height: Theme.dp(100) anchors.centerIn: parent text: "Hello!"

}

Rectangle {

id: rect

color: "lightgreen" anchors.top: text1.bottom

anchors.horizontalCenter: parent.horizontalCenter width: Theme.dp(150)

height: Theme.dp(150)

}

Button {

backgroundColor: "white" anchors.top: rect.bottom

anchors.horizontalCenter: parent.horizontalCenter

2

width: Theme.dp(100)

height: Theme.dp(100)

}

}

2. Динамическое обновление компоновки при смене ориентации

экрана

При повороте устройства и смене ориентации экрана приложения ОС Аврора могут использовать соответствующие свойства для адаптации своего пользовательского интерфейса.

Для динамического обновления компоновки при смене ориентации экрана следует:

Установить свойству allowedOrientations страницы значение для поддержки всех необходимых ориентаций экрана.

С помощью свойств страницы isPortrait, isLandscape или orientation

соответствующим образом обновлять пользовательский интерфейс при смене ориентации экрана.

В качестве примера можно рассмотреть приложение, которое показывает изображение и его основные метаданные (имя файла, ширина и высота). В портретной ориентации экрана изображение Image центрируется по горизонтали в верхней части экрана, а в столбце из объектов типа DetailItem

показываются метаданные изображения:

import QtQuick 2.2 import Sailfish.Silica 1.0

Page {

id: page

allowedOrientations: Orientation.All

3

PageHeader {

id: header

title: "Image details"

}

Image {

id: image

anchors {

top: header.bottom

horizontalCenter: page.isPortrait ? parent.horizontalCenter : undefined

}

sourceSize.width: {

var maxImageWidth = Screen.height/2

var leftMargin = Theme.horizontalPageMargin

var rightMargin = page.isPortrait ? Theme.horizontalPageMargin : 0 return maxImageWidth - leftMargin - rightMargin

}

fillMode: Image.PreserveAspectFit source: "aurora.png"

}

Column {

anchors {

// в альбомной ориентации верх столбца привязывается к нижней границе заголовка (вместо нижней границы изображения)

top: page.isPortrait ? image.bottom : header.bottom topMargin: page.isPortrait ? Theme.paddingLarge : 0

4

//в альбомной ориентации левая граница столбца привязывается к правой границе изображения

//с отступом Theme.paddingLarge между ними

left: page.isPortrait ? parent.left : image.right

leftMargin: page.isPortrait ? Theme.horizontalPageMargin : Theme.paddingLarge

right: parent.right

rightMargin: Theme.horizontalPageMargin

}

DetailItem { label: "Name of file"; value: image.source }

DetailItem { label: "Width"; value: image.width }

DetailItem { label: "Height"; value: image.height }

}

}

И чтобы проверить в горизонтальной ориентации, нужно изменить ориентацию, так как повернуть эмулятор мы не можем.

Page {

id: page

allowedOrientations: Orientation.Landscape

}

Объект Page определяет страницу приложения, которая содержит заголовок, изображение и информацию о деталях.

5

PageHeader - это элемент страницы, который находится в верхней части страницы и содержит заголовок "Image details".

Image - это элемент для отображения изображения. sourceSize.width

ограничивает ширину изображения взависимости от размера экрана и отступов.

Также на странице присутствует Column - это элемент для вертикального размещения других элементов.

DetailItem - это пользовательский элемент, который используется для отображения информации об изображении. Лейблы для этого элемента - это категории информации, а значения в этих категориях - это соответствующая информация об изображении.

Вкоде также задается привязка элементов к различным границам страницы, в зависимости от ориентации экрана. Если страница находится в портретной ориентации, то верхний границы элементов столбца привязываются к нижней границе заголовка. Если страница находится в альбомной ориентации, то верхние границы элементов столбца привязываются к нижней границы изображения. Левая граница столбца привязывается к правой границе изображения с отступом. А правая граница столбца привязывается к правой границе страницы с отступом.

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

6

Модуль 3 Тема 3.7

1

Приведите пример кода с использованием типа AddAnimation,

реализующий стандартную анимацию при добавлении элементов в

контейнеры типов SilicaListView и SilicaGridView.

import QtQuick 2.2 import Sailfish.Silica 1.0

Page {

ListView {

id: listView

width: parent.width height: 400

model: ListModel { ListElement { text: "Item 1" } ListElement { text: "Item 2" } ListElement { text: "Item 3" }

}

delegate: Item {

width: listView.width height: 50

Text {

text: model.text anchors.centerIn: parent

}

}

2

AddAnimation { id: animation target: listView

property: "height" from: 0

to: 400 duration: 1000

easing.type: Easing.InOutQuad

}

}

Button {

id: btn

text: "Add Item" anchors {

centerIn: parent

//horizontalCenter: parent.horizontalCenter //top: listView.bottom

topMargin: 30

}

onClicked: {

listView.model.append({ text: "New Item" }) animation.running = true

}

}

}

3

На странице (`Page`) расположен список (`ListView`), который отображает три элемента модели (`ListModel`), каждый из которых содержит текст. Каждый элемент списка представлен делегатом (`delegate: Item`),

который задает внешний вид элемента списка. Делегат содержит `Text`,

который отображает текст элемента модели.

Также на странице есть кнопка (`Button`), при нажатии на которую происходит добавление нового элемента (`listView.model.append({ text: "New Item" })`) в список. При добавлении элемента проигрывается анимация

(`AddAnimation`), которая меняет высоту списка с 0 до 400 пикселей в течение одной секунды (`duration: 1000`), применяя к этому свойству кривую замедления (`easing.type: Easing.InOutQuad`).

Кнопка расположена сверху от списка с отступом по вертикали в 30

пикселей (`topMargin: 30`). Если раскомментировать строки `horizontalCenter: parent.horizontalCenter` и `top: listView.bottom`, то кнопка будет центрироваться по горизонтали относительно родительского элемента и будет отображаться под списком, соответственно.

GridView

import QtQuick 2.2 import Sailfish.Silica 1.0

Page {

GridView {

id: listView

width: parent.width height: 400

cellWidth: 80; cellHeight: 80

4