Skip to main content
تخط المحتوى

عناصر التحكم والعناصر التفاعلية

اجعل تطبيقاتك أكثر تفاعلية باستخدام الأزرار وعناصر تحكم التحديد وأشرطة التمرير وحقول النص.

يستفيد كيريغامي من مجموعة واسعة من العناصر التفاعلية المختلفة من كيوتي التي يمكنك استخدامها في تطبيقاتك. لكل نوع مختلف أنماط تفاعل وأساليب بصرية ووظائف مختلفة قليلاً. استخدام النوع الصحيح من عناصر التحكم في تطبيقك يمكن أن يساعد في جعل واجهة المستخدم أكثر استجابة وبديهية.

الأزرار

في تطبيقات كيريغامي، نستخدم [زر] عناصر تحكم كيوتيك السريعة (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"
                }
            }
        }
    }
}

نافذة تظهر شريط تمرير نطاق، متبوعًا ببعض اللصائق أسفله وزر مع أيقونة علامة اختيار