Controles e elementos interativos
O Kirigami utiliza uma ampla seleção de diferentes elementos interativos do Qt que você pode usar em seus aplicativos. Cada tipo diferente possui estilos de interação, estilos visuais e funcionalidades ligeiramente diferentes. Usar o tipo certo de controle em seu aplicativo pode ajudar a tornar sua interface de usuário mais responsiva e intuitiva.
Botões
Em aplicativos Kirigami, usamos o Button do QtQuick Controls. Usá-los é bastante simples: definimos a propriedade text e qualquer ação que queremos que ele execute é definida como a propriedade 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!")
}
}
}
}
Botões alternáveis
O comportamento dos botões pode ser alterado para torná-los alternáveis: neste modo, eles permanecerão pressionados até serem clicados novamente. Este modo pode ser ativado definindo a propriedade checkable como true; também podemos definir que os botões sejam alternados por padrão definindo checked como true.
Podemos aproveitar ao máximo os botões alternáveis usando o manipulador de sinal onCheckedChanged, que é gerado automaticamente a partir do sinal checked. Ele funciona de forma semelhante ao onClicked, exceto que aqui a ação atribuída será executada quando o estado do botão mudar. É uma propriedade booleana, que pode ser útil para casos de uso específicos.
Neste exemplo, definimos a visibilidade de uma gaveta embutida de acordo com o status de um botão alternável:
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!"
}
}
}
}
}
Nota
Com o tema Breeze padrão do KDE Plasma, pode ser difícil dizer se um botão está ativado, pois os botões ficam azuis quando clicados. Leve isso em consideração ao criar seu aplicativo: um controle diferente pode ser mais amigável.Botões da barra de ferramentas
Existe um tipo específico de botão destinado ao uso em barras de ferramentas, Controls.ToolButton. A diferença mais óbvia entre ele e um Button convencional é o estilo, com os botões de ferramentas sendo planos (embora isso seja alterável com a propriedade booleana 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!")
}
}
}
}
Controles de seleção
Os controles de seleção permitem que os usuários façam uma escolha ou escolham uma opção. Existem diferentes tipos que são mais adequados para diferentes situações.
Caixas de seleção
Uma Controls.CheckBox é destinada a opções em que as escolhas não são exclusivas e onde cada opção tem uma alternativa clara.
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
}
}
}
}
Como você pode ver, eles são simples de usar. A propriedade checked contém um valor booleano que determina se eles foram verificados ou não.
Botões de opção
Um Controls.RadioButton foi projetado para situações em que o usuário deve escolher uma opção de um conjunto de várias opções.
Os botões de opção são exclusivos por padrão: apenas um botão pode ser marcado no mesmo item pai.
Assim como as caixas de seleção, eles podem ser definidos para serem marcadas ou desmarcadas por padrão com a propriedade 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
}
}
}
}
Interruptores
No desktop, alterar as configurações geralmente envolve alterar a configuração e aplicá-la clicando no botão "Aplicar" ou "OK". No celular, podemos usar Controls.Switch em vez disso.
Os interruptores podem ser alternados entre os estados ligado e desligado. Eles podem ser alternados clicando ou tocando neles, ou podem ser arrastados para a posição ligado ou desligado. Mais uma vez, os interruptores podem ser definidos como ligados ou desligados por padrão com a propriedade 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
}
}
}
}
Controles deslizantes
Os controles deslizantes permitem que os usuários selecionem determinados valores deslizando uma alça ao longo de uma trilha. Existem vários tipos que você pode escolher, dependendo dos valores que deseja que seus usuários escolham em seu aplicativo.
Controles deslizantes padrão e marcados
Um Controls.Slider padrão fornece ao usuário um controle muito preciso sobre a seleção que deseja fazer.
No modo da esquerda para a direita, os controles deslizantes vão da esquerda para a direita para aumentar quando na orientação horizontal, enquanto no modo da direita para a esquerda, eles vão na direção inversa. Em ambos os modos, os controles deslizantes na orientação vertical vão de baixo para cima.
A coloração fornece um indicador visual de quão grande é o valor que você está selecionando.
Os controles deslizantes têm algumas propriedades importantes às quais devemos prestar atenção:
- value: contém o valor no qual o identificador é colocado e também pode ser definido manualmente para fornecer um valor inicial padrão
- to: define o intervalo do controle deslizante especificando o valor máximo que ele pode atingir
- orientation: permite que o controle deslizante seja definido para uma orientação vertical com 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)
}
}
}
}
Outra propriedade útil que podemos usar é stepSize. Defini-la como um valor numérico nos permite criar um controle deslizante que se encaixa em valores múltiplos do stepSize especificado, com esses múltiplos sendo indicados por marcas de seleção. Portanto, se definirmos essa propriedade como 2,0, quando o usuário arrastar a alça do controle deslizante, ele só poderá selecionar 0,0, 2,0, 4,0, etc. até o valor especificado na propriedade 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
}
}
}
}
Controles deslizantes de intervalo
O QtQuick Controls também fornece Controls.RangeSliders. Eles possuem duas alças, permitindo que você defina um intervalo de números entre as duas alças.
Duas novas propriedades são importantes de se ter em mente: first.value e second.value, que contêm os valores dos dois identificadores. Assim como a propriedade value dos controladores deslizantes padrão, elas podem ser predefinidas.
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"
}
}
}
}
}