我一直在尝试使用Qt虚拟键盘,并且一直运行得很好。
问题是:
- 设置环境变量。
- QT_VIRTUALKEYBOARD_STYLE(未找到)。我已经从另一个stackoverflow帖子中创建了自己的样式,看起来不错,但是没有找到。
警告:Cannot find style ".../INTERACT/interact-ii/tools/en_GB/customkb.qml" - fallback: "default"
一些尝试:
- 已经将customkeyboard.qml单独文件放在我自己的项目中,并将变量设置为其路径。
- 修改后,将整个文件夹“ en_GB”从项目中的默认Qt文件夹中放入。
- 还使用我的样式将变量设置为Qt文件夹中的原始路径。
- 下载了Qt 5.8 / 5.7 / 5.6,并对所有qtvirtualkeyboard进行了相同的操作。
- 看到上述错误(备用:“默认”)后,我尝试将qml项目从qt文件夹添加到default.qml。[... / Qt / 5.8 / Src / qtvirtualkeyboard / src / virtualkeyboard / content / styles / default]
- 用QTCreator打开了qtvirtualkeyboard.so文件,并在更改我的qml文件后构建了所有文件,以查看它是否可以更改某些内容,并且没有任何更改。
他们似乎都没有修改我的键盘大小和位置。
以下是一个重要示例的文件。
1-使用键盘的小示例2-我的customkeyboard.qml
import os
import sysfrom PyQt5.QtCore import QProcessEnvironment
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidgetos.environ["QT5DIR"] = "/home/epson/Qt/5.8/gcc_64"
os.environ["QT_QPA_PLATFORM_PLUGIN_PATH"] = "/home/epson/Qt/5.8/gcc_64/plugins/platforms"
os.environ["QT_PLUGIN_PATH"] = "/home/epson/Qt/5.8/gcc_64/plugins"
os.environ["QML_IMPORT_PATH"] = "/home/epson/Qt/5.8/gcc_64/qml"
os.environ["QML2_IMPORT_PATH"] = "/home/epson/Qt/5.8/gcc_64/qml"os.environ["QT_VIRTUALKEYBOARD_LAYOUT_PATH"] = "/home/epson/INTERACT/interact-ii/tools/en_GB/customkb.qml"
os.environ["QT_VIRTUALKEYBOARD_STYLE"] = "/home/epson/Qt/5.8/Src/qtvirtualkeyboard/src/virtualkeyboard/content/styles"
os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"for i in QProcessEnvironment.systemEnvironment().keys():print(i)class MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.line_edit = Noneself.init_ui()def init_ui(self):self.line_edit = QLineEdit()self.line_edit2 = QLineEdit()self.layout = QVBoxLayout()self.main_widget = QWidget()self.main_widget.setLayout(self.layout)self.layout.addWidget(self.line_edit)self.layout.addWidget(self.line_edit2)self.setCentralWidget(self.main_widget)if __name__ == "__main__":app = QApplication(sys.argv)mw = MainWindow()mw.show()sys.exit(app.exec_())
2-我的customkeyboard.qml
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/import QtQuick 2.0
import QtQuick.Window 2.2
import QtQuick.VirtualKeyboard 2.1
import "content"Item {width: 1280height: 720Item {id: appContainerwidth: Screen.width < Screen.height ? parent.height : parent.widthheight: Screen.width < Screen.height ? parent.width : parent.heightanchors.centerIn: parentrotation: Screen.width < Screen.height ? 90 : 0Basic {id: virtualKeyboardanchors.left: parent.leftanchors.top: parent.topanchors.right: parent.rightanchors.bottom: inputPanel.top}/* Handwriting input panel for full screen handwriting input.This component is an optional add-on for the InputPanel component, thatis, its use does not affect the operation of the InputPanel component,but it also can not be used as a standalone component.The handwriting input panel is positioned to cover the entire area ofapplication. The panel itself is transparent, but once it is active theuser can draw handwriting on it.*/HandwritingInputPanel {z: 79id: handwritingInputPanelanchors.fill: parentinputPanel: inputPanelRectangle {z: -1anchors.fill: parentcolor: "black"opacity: 0.10}}/* Container area for the handwriting mode button.
问题:
我在设置STYLE和LAYOUT变量方面做错了吗?我应该真正设置这两者中的哪一个,是STYLE还是LAYOUT变量会改变键盘的大小和位置?我应该在哪里真正放置qml文件?我究竟做错了什么?看不出是什么问题!!
我相信您会混淆样式的布局,这会给您带来一些问题。
布局(Layouts)
- en_GB目录中的.qml文件是Qt用于键盘布局的文件。
- 要包含自定义布局,必须将QT_VIRTUALKEYBOARD_LAYOUT_PATH变量指向为自定义布局创建的目录(例如QT_VIRTUALKEYBOARD_LAYOUT_PATH = /path/to/custom/keyboard-layout/mycustomlayout)。然后,要添加英式英语的自定义布局,您将在/path/to/custom/keyboard-layout/mycustomlayout中创建一个en_GB目录。在您的en_GB目录中,至少应具有main.qml。
- 您已将文件命名为customkeyboard.qml。为了让Qt来正确定位,加载和处理您的自定义布局,您必须遵循默认布局(即main.qml,handwriting.qml,symbols.qml)的文件命名约定,作为参考这里。
样式(Styles)
对于自定义样式,您必须将自定义样式目录放在$$[QT_INSTALL_QML]/QtQuick/VirtualKeyboard/Styles中,如此处所述。显然,您的自定义style.qml文件位于自定义样式目录中。
希望这可以帮助您澄清一些事情。
为了澄清起见,QT_VIRTUALKEYBOARD_LAYOUT_PATH应将其设置为en_GB的包含文件夹。为了确认您已经为布局正确设置了所有设置,我只需要交换前两个键main.qml(例如,用“ W”代替“ Q”),以验证Qt是否正在使用您打算操纵的布局。在中定义位置,大小等style.qml。这个文件应该被放置在$$[QT_INSTALL_QML]/QtQuick/VirtualKeyboard/Styles/YourCustomStyleNameGoesHere/style.qml与QT_VIRTUALKEYBOARD_STYLE设置为$$[QT_INSTALL_QML]/QtQuick/VirtualKeyboard/Styles/YourCustomStyleNameGoesHere