Qt虚拟键盘[PyQt 5.8] - 找不到样式,无法调整虚拟键盘的大小

时间:2017-05-24 18:34:09

标签: python qt pyqt pyqt5

我一直在努力使用Qt虚拟键盘,它一直很好,直到......

问题是:

  1. 正在设置环境变量。 (有点检查)
  2. QT_VIRTUALKEYBOARD_STYLE(未找到)。我已经创建了自己的风格,从另一个stackoverflow帖子,似乎相当不错,但它没有找到。
  3.   

    警告:找不到样式   " ... / INTERACT /相互作用-II /工具/ EN_GB / customkb.qml" -   后备:"默认"

    有些尝试:

    1. 已将customkeyboard.qml单独文件放在我自己的项目中,并将变量设置为其路径。
    2. 已将整个文件夹" en_GB"从我的项目中的默认Qt文件夹进行修改。
    3. 还使用我的样式将Qt文件夹中的原始路径设置为变量。
    4. 下载Qt 5.8 / 5.7 / 5.6并对所有qtvirtualkeyboard执行相同的操作。
    5. 看到上面的错误(后备:"默认")我试图将我的qml项目添加到qt文件夹中的default.qml。 [... / QT / 5.8 /的Src / qtvirtualkeyboard / SRC /虚拟键盘/内容/风格/默认]
    6. 使用QTCreator打开了qtvirtualkeyboard.so文件,并在更改我的qml文件之后构建了所有文件,以查看它是否会改变某些内容并且没有任何更改。
    7. 他们似乎都没有修改我的键盘尺寸和位置。

      以下是一个小例子的文件。

      1 - 使用键盘的小例子。

      import os
      import sys
      
      from 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 QWidget
      
      os.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 = None
      
      
              self.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: 1280
          height: 720
      
          Item {
              id: appContainer
              width: Screen.width < Screen.height ? parent.height : parent.width
              height: Screen.width < Screen.height ? parent.width : parent.height
              anchors.centerIn: parent
              rotation: Screen.width < Screen.height ? 90 : 0
              Basic {
                  id: virtualKeyboard
                  anchors.left: parent.left
                  anchors.top: parent.top
                  anchors.right: parent.right
                  anchors.bottom: inputPanel.top
              }
      
              /*  Handwriting input panel for full screen handwriting input.
      
                  This component is an optional add-on for the InputPanel component, that
                  is, 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 of
                  application. The panel itself is transparent, but once it is active the
                  user can draw handwriting on it.
              */
              HandwritingInputPanel {
                  z: 79
                  id: handwritingInputPanel
                  anchors.fill: parent
                  inputPanel: inputPanel
                  Rectangle {
                      z: -1
                      anchors.fill: parent
                      color: "black"
                      opacity: 0.10
                  }
              }
      
              /*  Container area for the handwriting mode button.
      
                  Handwriting mode button can be moved freely within the container area.
                  In this example, a single click changes the handwriting mode and a
                  double-click changes the availability of the full screen handwriting input.
              */
              Item {
                  z: 89
                  visible: handwritingInputPanel.enabled && Qt.inputMethod.visible
                  anchors { left: parent.left; top: parent.top; right: parent.right; bottom: inputPanel.top; }
                  HandwritingModeButton {
                      id: handwritingModeButton
                      anchors.top: parent.top
                      anchors.right: parent.right
                      anchors.margins: 10
                      floating: true
                      flipable: true
                      width: 76
                      height: width
                      state: handwritingInputPanel.state
                      onClicked: handwritingInputPanel.active = !handwritingInputPanel.active
                      onDoubleClicked: handwritingInputPanel.available = !handwritingInputPanel.available
                  }
              }
      
              /*  Keyboard input panel.
      
                  The keyboard is anchored to the bottom of the application.
              */
              InputPanel {
                  id: keyboard;
                  y: screenHeight; // position the top of the keyboard to the bottom of the screen/display
      
                  anchors.left: parent.left;
                  anchors.right: parent.right;
      
                  states: State {
                      name: "visible";
                      when: keyboard.active;
                      PropertyChanges {
                          target: keyboard;
                          // position the top of the keyboard to the bottom of the text input field
                          y: textInput.height;
                      }
                  }
                  transitions: Transition {
                      from: ""; // default initial state
                      to: "visible";
                      reversible: true; // toggle visibility with reversible: true;
                      ParallelAnimation {
                          NumberAnimation {
                              properties: "y";
                              duration: 250;
                              easing.type: Easing.InOutQuad;
                          }
                      }
                  }
              }
          }
      }
      

      问题:

      我是否在设置STYLE和LAYOUT变量方面做错了?我应该真正设置哪一个,是STYLE还是LAYOUT变量会改变键盘的大小和位置?我应该在哪里放置qml文件?我究竟做错了什么?看不出有什么问题!!

      Obs:即使遵循此post也无法使其发挥作用。一切都完全相同,但似乎缺少某些东西,或者我误解了一些东西。

1 个答案:

答案 0 :(得分:1)

我相信你会混淆样式的布局,这会给你带来一些问题。

布局

  1. en_GB目录中的.qml文件是Qt用于键盘布局的内容。
  2. 要包含自定义布局,必须将QT_VIRTUALKEYBOARD_LAYOUT_PATH var指向您为自定义布局创建的目录(例如QT_VIRTUALKEYBOARD_LAYOUT_PATH = / path / to / custom / keyboard-layout / mycustomlayout)。然后,要为英式英语添加自定义布局,您可以在/ path / to / custom / keyboard-layout / mycustomlayout中创建一个en_GB目录。在你的en_GB目录中,你至少应该有main.qml。
  3. 您已将文件命名为customkeyboard.qml。为了让Qt正确定位,加载和处理您的自定义布局,您必须遵循默认布局的文件命名约定(即main.qml,handwriting.qml,symbols.qml),如引用的here
  4. 样式

    对于自定义样式,您必须将自定义样式目录放在$$ [QT_INSTALL_QML] / QtQuick / VirtualKeyboard / Styles中,引用为here。显然,您的自定义style.qml文件位于自定义样式目录中。

    希望这有助于为您澄清一些事情。