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").

Другие вопросы по тегам