Spec-Zone.ru › Qt

Тип QML InputPanel

Предоставляет виртуальную клавиатуру UI. Подробнее...

Заявление об импорте: import QtQuick.VirtualKeyboard
Наследует:

Item

  • Список всех членов, включая унаследованные члены

Свойства

  • active : bool
  • externalLanguageSwitchEnabled : bool

Сигналы

  • externalLanguageSwitch(var localeList, int currentIndex)

Подробное описание

Размер клавиатуры автоматически вычисляется по доступной ширине; другими словами, клавиатура поддерживает соотношение сторон, заданное текущим стилем. Поэтому приложение должно задавать только координаты ширины (width) и y (y) InputPanel, а не высоту (height).

Как и в случае со всеми другими типами QML, предоставляемыми модулем, переменная среды QT_IM_MODULE должна быть установлена в значение qtvirtualkeyboard перед использованием InputPanel. Дополнительную информацию см. в разделе Загрузка плагина.

Примечание: в вашем приложении может быть только один экземпляр InputPanel.

InputPanel и модальные диалоги

Qt предотвращает блокировку модальных всплывающих окон UI клавиатуры, так как это сделало бы невозможным использование клавиатуры для ввода в текстовое поле внутри модального всплывающего окна. Когда поле ввода получает фокус во время модальной сессии, элемент InputPanel становится братом Overlay и получает значение z на единицу выше Overlay, чтобы оставаться поверх пользовательского интерфейса. По завершении модальной сессии элемент возвращается к исходному родителю, и значение z восстанавливается.

Документация свойств

[с QtQuick.VirtualKeyboard 2.0] active : bool

Это свойство отражает активный статус панели ввода. Клавиатура должна быть видна пользователю, когда это свойство равно true.

Это свойство было добавлено в QtQuick.VirtualKeyboard 2.0.

[с QtQuick.VirtualKeyboard 2.4] externalLanguageSwitchEnabled : bool

Это свойство включает механизм внешнего переключения языков. Когда это свойство равно true, виртуальная клавиатура не будет показывать встроенное всплывающее меню языка, а вместо этого будет испускать сигнал externalLanguageSwitch. Приложение может обработать этот сигнал и вместо этого отобразить пользовательский диалог выбора языка.

Это свойство было добавлено в QtQuick.VirtualKeyboard 2.4.

Документация сигналов

[since QtQuick.VirtualKeyboard 2.4] externalLanguageSwitch(var localeList, int currentIndex)

Этот сигнал испускается, когда externalLanguageSwitchEnabled равно true и пользователь нажимает клавишу переключения языков.

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

Параметр localeList содержит список кодов языков для выбора. Чтобы получить дополнительную информацию о конкретном языке, используйте функцию Qt.locale(). currentIndex — индекс текущего языка в localeList. Этот элемент должен быть выделен как текущий в пользовательском интерфейсе.

Чтобы выбрать новый язык, используйте свойство VirtualKeyboardSettings.locale.

Ниже приведен пример реализации пользовательского диалога выбора языка:

Dialog {
    id: languageDialog
    title: "Select Input Language"
    modality: Qt.ApplicationModal

    function show(localeList, currentIndex) {
        languageListModel.clear()
        for (var i = 0; i < localeList.length; i++) {
            languageListModel.append({localeName: localeList[i], displayName: Qt.locale(localeList[i]).nativeLanguageName})
        }
        languageListView.currentIndex = currentIndex
        languageListView.positionViewAtIndex(currentIndex, ListView.Center)
        languageDialog.visible = true
    }

    contentItem: ListView {
        id: languageListView
        model: ListModel {
            id: languageListModel
            function selectItem(index) {
                VirtualKeyboardSettings.locale = languageListModel.get(index).localeName
                languageDialog.visible = false
            }
        }
        delegate: Item {
            id: languageListItem
            width: languageNameTextMetrics.width * 17
            height: languageNameTextMetrics.height + languageListLabel.anchors.topMargin + languageListLabel.anchors.bottomMargin
            Text {
                id: languageListLabel
                anchors.left: parent.left
                anchors.top: parent.top
                anchors.leftMargin: languageNameTextMetrics.height / 2
                anchors.rightMargin: anchors.leftMargin
                anchors.topMargin: languageNameTextMetrics.height / 3
                anchors.bottomMargin: anchors.topMargin
                text: languageNameFormatter.elidedText
                color: "#5CAA15"
                font {
                    weight: Font.Normal
                    pixelSize: 28
                }
            }
            TextMetrics {
                id: languageNameTextMetrics
                font {
                    weight: Font.Normal
                    pixelSize: 28
                }
                text: "X"
            }
            TextMetrics {
                id: languageNameFormatter
                font {
                    weight: Font.Normal
                    pixelSize: 28
                }
                elide: Text.ElideRight
                elideWidth: languageListItem.width - languageListLabel.anchors.leftMargin - languageListLabel.anchors.rightMargin
                text: displayName
            }
            MouseArea {
                anchors.fill: parent
                hoverEnabled: true
                onClicked: {
                    if (index === -1)
                        return
                    parent.ListView.view.currentIndex = index
                    parent.ListView.view.model.selectItem(index)
                }
            }
            states: State {
                name: "current"
                when: languageListItem.ListView.isCurrentItem
                PropertyChanges {
                    target: languageListLabel
                    color: "black"
                }
            }
        }
    }
}

Затем диалог будет объявлен:

LanguageDialog {
    id: languageDialog
    width: 400
    height: 400
}

В InputPanel приложения добавьте следующий код:

InputPanel {
    id: inputPanel
    externalLanguageSwitchEnabled: true
    onExternalLanguageSwitch: languageDialog.show(localeList, currentIndex)
    // ...
}

Теперь при нажатии клавиши переключения языков будет отображаться пользовательский диалог.

Примечание: соответствующий обработчик — onExternalLanguageSwitch.

Этот сигнал был добавлен в QtQuick.VirtualKeyboard 2.4.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick-virtualkeyboard-inputpanel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API