عناصر التحكم والعناصر التفاعلية
يستفيد كيريغامي من مجموعة واسعة من العناصر التفاعلية المختلفة من كيوتي التي يمكنك استخدامها في تطبيقاتك. لكل نوع مختلف أنماط تفاعل وأساليب بصرية ووظائف مختلفة قليلاً. استخدام النوع الصحيح من عناصر التحكم في تطبيقك يمكن أن يساعد في جعل واجهة المستخدم أكثر استجابة وبديهية.
الأزرار
في تطبيقات كيريغامي، نستخدم [زر] عناصر تحكم كيوتيك السريعة (https://doc.qt.io/qt-6/qml-qtquick-controls-button.html). استخدامها بسيط جداً: نضبط خاصية النص وأي إجراء نريده أن ينفذ يُضبط لخاصية عند_النقر.
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!")
}
}
}
}
الأزرار القابلة للتبديل
يمكن تغيير سلوك الأزرار لجعلها قابلة للتبديل: في هذا الوضع، ستبقى مضغوطة حتى يُنقر عليها مرة أخرى. يمكن تفعيل هذا الوضع بضبط خاصية قابل_للتحقق إلى true؛ يمكننا أيضاً ضبط الأزرار لتكون مفعلة مبدئياً بضبط مُحدد إلى true.
يمكننا الاستفادة القصوى من الأزرار القابلة للتبديل باستخدام معالج الإشارة عند_تغير_المحدد والذي يُولد آلياً من إشارة مُحدد. يعمل بشكل مشابه لـ عند_النقر، باستثناء أن الإجراء المعين هنا يُنفذ عندما تتغير حالة الزر. إنها خاصية منطقية، قد تكون مفيدة لحالات استخدام محددة.
في هذا المثال، نضبط رؤية درج مضمّن وفقاً لحالة زر قابل للتبديل:
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!"
}
}
}
}
}
ملاحظة
مع سمة بريز المبدئية في بلازما كيدي قد يكون من الصعب معرفة ما إذا كان الزر مُبدلاً، لأن الأزرار تُلون باللون الأزرق عند النقر عليها. تأكد من أخذ هذا في الاعتبار عند إنشاء تطبيقك: قد يكون عنصر تحكم مختلف أكثر ملاءمة للمستخدم.أزرار شريط الأدوات
هناك نوع زر محدد مخصص للاستخدام في أشرطة الأدوات، عناصر_تحكم.زر_أداة. الفرق الأكثر وضوحاً بين هذا والزر التقليدي هو التصميم، حيث تكون أزرار الأدوات مسطحة (على الرغم من أن هذا قابل للتغيير باستخدام الخاصية المنطقية مسطح).
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!")
}
}
}
}
عناصر تحكم التحديد
تتيح عناصر تحكم التحديد للمستخدمين اتخاذ خيار أو اختيار خيار. هناك أنواع مختلفة مناسبة بشكل أفضل لمواقف مختلفة.
مربعات الاختيار
عناصر_تحكم.مربع_اختيار مخصص للخيارات حيث تكون الاختيارات غير حصرية وحيث يكون لكل خيار بديل واضح.
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
}
}
}
}
كما ترى، فهي بسيطة الاستخدام. خاصية مُحدد تحمل قيمة منطقية تحدد ما إذا تم تحديدها أم لا.
أزرار الراديو
عناصر_تحكم.زر_راديو مصمم للمواقف حيث يجب على المستخدم اختيار خيار واحد من مجموعة من عدة خيارات.
أزرار الراديو حصرية مبدئياً: يمكن تحديد زر واحد فقط في نفس العنصر الأب.
مثل مربعات الاختيار، يمكن ضبطها لتكون محددة أو غير محددة مبدئياً باستخدام خاصية مُحدد.
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
}
}
}
}
المفاتيح
على سطح المكتب، عادةً ما يتضمن تغيير الإعدادات تغيير الإعداد ثم تطبيقه بالنقر على زر "تطبيق" أو "موافق". على الجوال، يمكننا استخدام عناصر_تحكم.مفتاح بدلاً من ذلك.
يمكن تبديل المفاتيح بين حالة تشغيل وإيقاف. يمكن تبديلها بالنقر أو الضغط عليها، أو يمكن سحبها نحو وضع التشغيل أو الإيقاف. مرة أخرى، يمكن ضبط المفاتيح لتكون في وضع التشغيل أو الإيقاف مبدئياً باستخدام خاصية مُحدد.
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.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"
}
}
}
}
}