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

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

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

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

1

Создайте проект с реализацией боковой панели навигации меню

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

Основными элементами кода являются:

● Первый элемент - кнопка, при нажатии на которую открывается боковая панель навигации меню вправо. При повторном клике панель закрывается. Боковая панель реализована с помощью прямоугольника

(Rectangle) с заданным цветом и радиусом. Для перемещения прямоугольника используются анимации, объединенные в параллельную анимацию. При запуске анимации происходит изменение свойства x, т.е. перемещение прямоугольника, и изменение значения свойства opacity, т.е. прозрачности.

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

Оба элемента объединены в общую страницу (Page), которая представляет основной контент приложения.

Блоки с анимацией содержат свойства target, properties, from, to, duration

иeasing.

target определяет объект, свойства которого будут анимироваться;

properties - перечисляет свойства объекта, которые будут изменяться в ходе анимации;

from и to - начальное и конечное значения свойств в ходе

анимации;

duration - длительность анимации в миллисекундах;

2

● easing - тип используемой кривой, определяющей характер изменения свойства в ходе анимации.

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

import QtQuick 2.2 import Sailfish.Silica 1.0

Page {

objectName: "mainPage" allowedOrientations: Orientation.All

Button {

id: btn1

anchors.horizontalCenter: parent.horizontalCenter

text: qsTr("menu right") onClicked: {

if(menuRect.x === parent.width + 1)

{

menuStartAnim.start()

}

else

{

menuStopAnim.start()

}

}

}

3

//Combination animation ParallelAnimation{

id: menuStartAnim

//Attribute animation NumberAnimation{

target: menuRect properties: "x"

from: parent.width + 1 to: menuRect.width

//Animation duration, milliseconds duration: 500

//Animation gradient curve easing.type: Easing.OutQuad

}

NumberAnimation{ target: menuRect properties: "opacity" from: 0.2

to: 0.8 duration: 500;

easing.type: Easing.OutQuad

}

}

ParallelAnimation{

id: menuStopAnim

NumberAnimation{ target: menuRect properties: "x"

from: menuRect.width

4

to: parent.width + 1 duration: 500; easing.type: Easing.Linear

}

NumberAnimation{ target: menuRect properties: "opacity" from: 0.8

to: 0.2 duration: 500;

easing.type: Easing.Linear

}

}

Rectangle {

id: menuRect

x : parent.width + 1 width: parent.width / 2 height: parent.height color: "lightblue" radius: 5

}

Button {

id: btn2

anchors.top: btn1.bottom anchors.left: btn1.left text: qsTr("menu left")

5

onClicked: { if(menuRect2.x < 0)

{

menuStartAnim2.start()

}

else

{

menuStopAnim2.start()

}

}

}

//Combination animation ParallelAnimation{

id: menuStartAnim2

//Attribute animation NumberAnimation{

target: menuRect2 properties: "x" from: -1000

to: 0

//Animation duration, milliseconds duration: 500

//Animation gradient curve easing.type: Easing.OutQuad

}

NumberAnimation{ target: menuRect2 properties: "opacity"

6

from: 0.2 to: 0.8

duration: 500;

easing.type: Easing.OutQuad

}

}

ParallelAnimation{

id: menuStopAnim2

NumberAnimation{ target: menuRect2 properties: "x" from: 0

to: -1000 duration: 500;

easing.type: Easing.Linear

}

NumberAnimation{ target: menuRect2 properties: "opacity" from: 0.2

to: 0.8 duration: 500;

easing.type: Easing.Linear

}

}

Rectangle {

id: menuRect2 x: -1000

7

y: 0

width: parent.width / 2

height: parent.height

color: "lightblue"

radius: 5

}

}

8