Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML虚拟键盘添加新布局_Qt_Keyboard_Qml_Yocto_Qtvirtualkeyboard - Fatal编程技术网

Qt QML虚拟键盘添加新布局

Qt QML虚拟键盘添加新布局,qt,keyboard,qml,yocto,qtvirtualkeyboard,Qt,Keyboard,Qml,Yocto,Qtvirtualkeyboard,我在raspberry pi的Yocto项目中使用QtQML5.7。我的项目需要土耳其语言的虚拟键盘。QT虚拟键盘,所以我想创建我的自定义布局。我以“myCustomLayout.qml”的名称添加项目示例布局代码 我通过以下代码运行虚拟键盘显示功能 import QtQuick 2.5 import QtQuick.VirtualKeyboard 2.1 import QtQuick.Controls 2.0 InputPanel { id: inputPanel visib

我在raspberry pi的Yocto项目中使用QtQML5.7。我的项目需要土耳其语言的虚拟键盘。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
}

当我运行虚拟键盘显示功能时,出现的键盘不是我的自定义布局,它仍然是常规的英文键盘布局。如何在我的应用程序中添加自定义键盘布局?

如果您使用的是5.9之前的Qt版本,我认为您必须修补Qt虚拟键盘以添加自定义布局,然后重建它。通过添加您自己的条目来修改文件就足够了。例如:

contains(CONFIG, lang-tr.*) {
    LAYOUT_FILES += \
        content/layouts/tr_TR/main.qml
}
如果使用的是Qt 5.9或更高版本,则可以将
Qt_VIRTUALKEYBOARD_LAYOUT_PATH
环境变量设置为自定义样式的路径,如前所述:

虚拟键盘布局系统支持内置布局和自定义布局。内置布局作为Qt资源嵌入到插件二进制文件中。自定义布局位于文件系统中,因此可以在不重新编译虚拟键盘本身的情况下安装它们,也可以位于资源文件中

运行时布局的选择受
QT_VIRTUALKEYBOARD_LAYOUT_PATH
环境变量的影响。

如果未设置环境变量,或包含无效目录,虚拟键盘将返回默认内置布局

要防止在使用自定义布局时将内置布局内置到虚拟键盘插件中,请向CONFIG qmake变量添加disable 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')。

我在我的计算机(而不是pi)的yocto构建路径中找到了qtvirtualkeyboard文件

/build/tmp/work/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/qtvirtualkeyboard/5.7.0+gitAUTOINC+626e78c966-r0/git/

我通过复制内容/布局路径中的en_GB文件创建了一个新的tr_tr布局文件。我更改了tr_tr main.qml文件。我修改了virtualkeyboard.pro文件,就像Mitch的答案一样,添加了以下几行

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文件复制到U盘,并在pi上打开文件。我使用以下内容重建了qtvirtualkeyboard:

qmake "CONFIG+=lang-all" qtvirtualkeyboard.pro
make
make install

最后,我可以使用我的自定义布局。

我在main.cpp文件qputenv中添加以下行(“QT_VIRTUALKEYBOARD_layout_PATH”,“:/myCustomLayout.qml”);但是没有效果。我怎么会错过。哦,等等,你在用Qt5.7。。。此环境变量仅在Qt 5.9中添加:/请将解决方案发布为答案,而不是问题的更新。这是为了避免未来读者的困惑。你可以从你的报告中看出,我已将这一变化退回。非常感谢。