Элементы управления и интерактивные элементы
Kirigami использует широкий выбор различных интерактивных элементов Qt, которые можно применять в приложениях. У каждого типа немного различаются стили взаимодействия, визуальные стили и функциональность. Использование подходящего типа элемента управления в приложении помогает сделать пользовательский интерфейс более отзывчивым и интуитивно понятным.
Кнопки
В приложениях Kirigami используется Button из QtQuick Controls. Работа с ними довольно проста: задаётся свойство text, а действие, которое должно выполняться, задаётся свойством onClicked.
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.Button"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.fill: parent
Controls.Button {
Layout.alignment: Qt.AlignCenter
text: "Beep!"
onClicked: showPassiveNotification("Boop!")
}
}
}
}
Переключаемые кнопки
Поведение кнопок можно изменить, сделав их переключаемыми: в этом режиме они остаются нажатыми, пока по ним не щёлкнуть ещё раз. Этот режим включается присвоением свойству checkable значения true; кнопки можно также включить по умолчанию, присвоив свойству checked значение true.
Наиболее полно использовать переключаемые кнопки позволяет обработчик сигнала onCheckedChanged, который создаётся автоматически из сигнала checked. Он работает аналогично onClicked, но назначенное действие выполняется при изменении состояния кнопки. Это логическое свойство, которое пригодится в отдельных случаях.
В этом примере видимость встроенной выдвижной панели задаётся в зависимости от состояния переключаемой кнопки:
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.Button (toggleable version)"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.fill: parent
Controls.Button {
Layout.alignment: Qt.AlignCenter
text: "Hide inline drawer"
checkable: true
checked: true
onCheckedChanged: myDrawer.visible = checked
}
Kirigami.OverlayDrawer {
id: myDrawer
edge: Qt.BottomEdge
modal: false
contentItem: Controls.Label {
text: "Peekaboo!"
}
}
}
}
}
Примечание
В KDE Plasma со стандартным оформлением Breeze бывает сложно определить, включена ли кнопка-переключатель, поскольку при нажатии кнопки окрашиваются в синий цвет. Учитывайте это при создании приложения: возможно, другой элемент управления окажется удобнее для пользователя.Кнопки панели инструментов
Существует особый тип кнопок, предназначенный для использования на панелях инструментов, — Controls.ToolButton. Наиболее очевидное отличие от обычной Button — оформление, причём кнопки панели инструментов плоские (хотя это можно изменить логическим свойством flat).
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.ToolButton"
width: 600
height: 600
header: Controls.ToolBar {
RowLayout {
anchors.fill: parent
Controls.ToolButton {
icon.name: "application-menu-symbolic"
onClicked: showPassiveNotification("Kirigami Pages and Actions are better!")
}
Controls.Label {
text: "Global ToolBar"
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
Layout.fillWidth: true
}
Controls.ToolButton {
text: "Beep!"
onClicked: showPassiveNotification("ToolButton boop!")
}
}
}
}
Элементы выбора
Элементы выбора позволяют сделать выбор или указать параметр. Разные типы лучше всего подходят для разных ситуаций.
Флажки
Controls.CheckBox предназначен для параметров, выбор которых не является взаимоисключающим и у каждого из которых есть явная альтернатива.
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.CheckBox"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
Controls.CheckBox {
Layout.alignment: Qt.AlignHCenter
text: "This checkbox is checked!"
checked: true
}
Controls.CheckBox {
Layout.alignment: Qt.AlignHCenter
text: "This checkbox is not checked!"
checked: false
}
}
}
}
Как видно, пользоваться ими просто. Свойство checked хранит логическое значение, определяющее, включены ли они.
Радиокнопки
Controls.RadioButton предназначен для ситуаций, когда требуется выбрать один вариант из нескольких.
Радиокнопки по умолчанию взаимоисключающие: в одном родительском элементе можно выбрать только одну радиокнопку.
Как и флажки, их можно по умолчанию включить или выключить с помощью свойства checked.
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.RadioButton"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
Controls.RadioButton {
Layout.alignment: Qt.AlignCenter
text: "Tick!"
checked: true
}
Controls.RadioButton {
Layout.alignment: Qt.AlignCenter
text: "Tock!"
checked: false
}
}
}
}
Переключатели
На настольном компьютере для изменения параметров обычно требуется изменить параметр, а затем применить его нажатием кнопки «Применить» или «ОК». На мобильных устройствах вместо этого можно использовать Controls.Switch.
Переключатели можно переключать между включённым и выключенным состояниями. Переключить их можно щелчком или касанием, а также перетаскиванием в положение «включено» или «выключено». Как и раньше, с помощью свойства checked можно сделать переключатели включёнными или выключенными по умолчанию.
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.Switch"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.fill: parent
Controls.Switch {
Layout.alignment: Qt.AlignCenter
text: "Switchy"
checked: true
}
Controls.Switch {
Layout.alignment: Qt.AlignCenter
text: "Swootchy"
checked: false
}
}
}
}
Ползунки
Ползунки позволяют выбирать определённые значения, перемещая ручку по дорожке. Существует несколько типов, из которых можно выбрать подходящий в зависимости от значений, которые должны выбирать пользователи в приложении.
Стандартные ползунки и ползунки с отметками
Стандартный Controls.Slider позволяет очень точно управлять выбором нужного значения.
В режиме «Слева направо» ползунки в горизонтальной ориентации перемещаются слева направо для увеличения значения, а в режиме «Справа налево» — в обратном направлении. В обоих режимах ползунки в вертикальной ориентации перемещаются снизу вверх.
Цветовая заливка служит наглядным показателем того, насколько велико выбираемое значение.
Следует обратить внимание на несколько важных свойств ползунков:
- value: содержит значение, на котором расположена ручка; его также можно задать вручную, чтобы указать начальное значение по умолчанию
- to: определяет диапазон ползунка, задавая максимальное значение, до которого он может доходить
- orientation: позволяет задать вертикальную ориентацию ползунка с помощью Qt.Vertical
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.Slider"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.fill: parent
Controls.Slider {
id: normalSlider
Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: true
orientation: Qt.Vertical
value: 60
to: 100
}
Controls.Label {
Layout.alignment: Qt.AlignHCenter
text: Math.round(normalSlider.value)
}
}
}
}
Ещё одно полезное свойство — stepSize. Присвоение ему числового значения позволяет создать ползунок, который привязывается к значениям, кратным указанному stepSize, причём эти кратные значения отмечаются делениями. Так, если присвоить этому свойству значение 2.0, то при перетаскивании ручки ползунка можно будет выбрать только 0.0, 2.0, 4.0 и т. д. вплоть до значения, указанного в свойстве to.
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.Slider (with steps)"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.fill: parent
Controls.Slider {
id: tickmarkedSlider
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
orientation: Qt.Horizontal
snapMode: Controls.Slider.SnapAlways
value: 6.0
to: 10.0
stepSize: 2.0
}
Controls.Label {
Layout.alignment: Qt.AlignHCenter
text: tickmarkedSlider.value
}
}
}
}
Ползунки диапазона
QtQuick Controls также предоставляет Controls.RangeSliders. У них две ручки, что позволяет задать диапазон чисел между ними.
Следует помнить о двух новых свойствах: first.value и second.value, которые хранят значения двух ручек. Как и свойство value стандартных ползунков, их можно задать заранее.
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as Controls
import org.kde.kirigami as Kirigami
Kirigami.ApplicationWindow {
title: "Controls.RangeSlider"
width: 400
height: 400
pageStack.initialPage: Kirigami.Page {
ColumnLayout {
anchors.fill: parent
Controls.RangeSlider {
id: rangeSlider
Layout.alignment: Qt.AlignHCenter
to: 10.0
first.value: 2.0
second.value: 8.0
stepSize: 1.0
snapMode: Controls.Slider.SnapAlways
}
RowLayout {
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
Controls.Label {
Layout.fillWidth: true
text: "The slider's first value is: " + Math.round(rangeSlider.first.value)
}
Controls.Label {
Layout.fillWidth: true
text: "The slider's second value is: " + Math.round(rangeSlider.second.value)
}
}
Controls.Label {
Layout.alignment: Qt.AlignHCenter
font.bold: true
text: "Is the selected range between 2 and 8?"
}
Controls.Button {
Layout.alignment: Qt.AlignHCenter
icon.name: {
if (rangeSlider.first.value >= 2 && rangeSlider.second.value <= 8)
return "emblem-checked"
else
return "emblem-error"
}
}
}
}
}