Тип QML InputPanel
Предоставляет виртуальную клавиатуру UI. Подробнее...
| Заявление об импорте: | import QtQuick.VirtualKeyboard |
| Наследует: |
Свойства
- 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