Spec-Zone.ru › Qt 5.12

Тип QML InputPanel

Обеспечивает интерфейс виртуальной клавиатуры. Подробнее...

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

Item

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

Свойства

  • active : bool
  • externalLanguageSwitchEnabled : bool

Сигналы

  • externalLanguageSwitch(var, int)

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

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

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

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

active : bool

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

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

externalLanguageSwitchEnabled : bool

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

Это свойство было добавлено в 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)
    // ...
}

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

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

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

Spec-Zone.ru

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