QML Virtual Keyboard Добавить новую раскладку
Я использую qt qml 5.7 в проекте Yocto для Raspberry Pi. Моему проекту нужна виртуальная клавиатура для турецкого языка. Виртуальная клавиатура QT не поддерживает турецкий язык, поэтому я хочу создать свой собственный макет. Отсюда я добавляю коды макетов моего проекта в качестве имени "myCustomLayout.qml".
И я запускаю свою виртуальную клавиатуру с помощью следующих кодов.
import QtQuick 2.5
import QtQuick.VirtualKeyboard 2.1
import QtQuick.Controls 2.0
InputPanel {
id: inputPanel
visible: Qt.inputMethod.visible
height:main.height/4
y:main.height - height
x:main.width/8
width: main.width*6/8
focus: true
}
Когда я запускал функцию отображения виртуальной клавиатуры, появившаяся клавиатура не была моей пользовательской раскладкой, это все еще обычная раскладка английской клавиатуры. Как добавить пользовательскую раскладку клавиатуры в мое приложение?
2 ответа
Я нашел файлы qtvirtualkeyboard в пути сборки yocto на моем компьютере (не пи).
/build/tmp/work/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/qtvirtualkeyboard/5.7.0+gitAUTOINC+626e78c966-r0/git/
Я создал новый файл макета tr_TR, скопировав файл en_GB в путь содержимого / макетов. Я изменил свой файл tr_TR main.qml. Я изменил файл virtualkeyboard.pro, как ответ Митча, добавив следующие строки.
contains(CONFIG, lang-tr.*) {
LAYOUT_FILES += \
content/layouts/tr_TR/main.qml
}
Также я модифицировал файл config.pri. Я изменил следующие строки:
# Default language
!contains(CONFIG, lang-.*) {
contains(QT_CONFIG, private_tests) { # CI or developer build, use all languages
CONFIG += lang-all
} else {
CONFIG += lang-tr_TR
}
}
# Flag for activating all languages
lang-all: CONFIG += \
# lang-ar_AR \
# lang-da_DK \
# lang-de_DE \
lang-en_GB \
# lang-es_ES \
# lang-fa_FA \
# lang-fi_FI \
# lang-fr_FR \
# lang-hi_IN \
# lang-it_IT \
# lang-ja_JP \
# lang-ko_KR \
# lang-nb_NO \
# lang-pl_PL \
# lang-pt_PT \
# lang-ru_RU \
# lang-sv_SE \
lang-tr_TR \
# lang-zh_CN \
# lang-zh_TW
Я скопировал измененный файл git на USB-накопитель и открыл мои файлы на пи. Я перестроил qtvirtualkeyboard с помощью:
qmake "CONFIG+=lang-all" qtvirtualkeyboard.pro
make
make install
Наконец я могу использовать свой собственный макет.
Если вы используете версию Qt более раннюю, чем 5.9, я думаю, что вы должны пропатчить виртуальную клавиатуру Qt, чтобы добавить свой собственный макет, а затем пересобрать его. Этого файла должно быть достаточно, добавив собственную запись. Например:
contains(CONFIG, lang-tr.*) {
LAYOUT_FILES += \
content/layouts/tr_TR/main.qml
}
Если вы используете Qt 5.9 или новее, вы можете установить QT_VIRTUALKEYBOARD_LAYOUT_PATH
переменная окружения к пути вашего собственного стиля, как упомянуто здесь:
Система раскладок виртуальной клавиатуры поддерживает как встроенные раскладки, так и пользовательские раскладки. Встроенные макеты встраиваются как Qt Resources в двоичный файл плагина. Пользовательские макеты расположены в файловой системе, поэтому их можно устанавливать без перекомпиляции самой виртуальной клавиатуры или в файле ресурсов.
Выбор макетов во время выполнения зависит от
QT_VIRTUALKEYBOARD_LAYOUT_PATH
переменная окружения.Если переменная среды не установлена или содержит недопустимый каталог, виртуальная клавиатура возвращается к встроенным макетам по умолчанию.
Чтобы предотвратить использование встроенных макетов в плагине виртуальной клавиатуры при использовании пользовательских макетов, добавьте disable-layout в переменную qmake CONFIG. Для получения дополнительной информации см. Дополнительные параметры конфигурации.
Чтобы взять пример из исходного кода модуля, этот тест устанавливает его "/data/layouts"
,
В качестве другого примера, предположим, что ваше приложение имеет следующую структуру каталогов:
C:\dev\temp\untitled
│ main.cpp
│ main.qml
│ resources.qrc
│ untitled.pro
│
└───en_GB
dialpad.qml
digits.qml
handwriting.qml
main.qml
numbers.qml
symbols.qml
Вы бы установили его на C:\dev\temp\untitled
, Он ожидает увидеть одну или несколько папок, каждая из которых названа в честь кода языка + страны, который представляет его макет, как показано здесь.
Чтобы убедиться, что это работает, вы можете скопировать en_GB
вернитесь из ссылки выше в ваш проект и измените его (я изменил клавишу "Q" на "Z").