1

我正在使用带有 qml 的 qtvirtualkeyboard 模块。我使用以下 qml 代码来显示虚拟键盘。

import QtQuick 2.5
import QtQuick.VirtualKeyboard 2.1

    InputPanel {
        id: inputPanel
        y: Qt.inputMethod.visible ? parent.height - inputPanel.height : parent.height
        anchors.left: parent.left
        anchors.right: parent.right
        focus: true
    }

当我在模态配置为 true 的对话框中调用该 qml 时,我无法触摸键盘。如果对话框模式配置为假,那么我可以触摸键盘,但这次对话框是隐藏的。另外我希望用户只能控制对话框屏幕上的键盘。

如何控制对话屏幕上的虚拟键盘?

4

3 回答 3

1

为 InputPanel 设置以下属性:

z: 1
parent: Overlay.overlay
focus: true

并为 Popup 设置以下属性:

modal: false
focus: true
于 2020-05-16T09:20:08.517 回答
1

如果我正确理解了问题,那么这可能与QTBUG-56918相同。正如 JP 在该错误报告的评论中所提到的,一种可能的解决方法(对于 Qt Quick Controls 2 应用程序)是设置parent: root.overlayz: 1InputPanel弹出窗口(或对话框)上方提升它。

于 2017-01-17T12:10:38.210 回答
0

如果您想为多个不同的对话框提供可重用的解决方案,那么将键盘设为对话框的子项会给您带来压力。因此,我的解决方法是使用带有 MouseArea 的非模态对话框,它可以被实例化并用作对话框(但使用别名属性而不是 Item 的):

模态对话框.qml:

Item {
  anchors.fill: parent
  property alias title: dialog.title
  property alias _x: dialog.x
  property alias _y: dialog.y
  property alias _width: dialog.width
  property alias _height: dialog.height
  property alias closePolicy: dialog.closePolicy
  property alias standardButtons: dialog.standardButtons
  default property alias contentData: dialog.contentData
  property alias _visible: dialog.visible
  visible: _visible
  function open() { dialog.open() }

  Dialog {
    id: dialog
  }
  MouseArea {
    anchors.fill: parent
    z: 100
  }
  Rectangle {
    anchors.fill: parent
    color: "black"
    opacity: dialog.opacity / 2
    z: 100
  }
}
于 2017-07-20T07:40:37.910 回答