在Dialog中显示VirtualKeyboard

时间:2017-01-17 11:14:23

标签: qt qml qtvirtualkeyboard

我正在使用带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时,我无法触摸键盘。如果对话框模态配置为false,那么我可以触摸键盘,但这次隐藏对话框。此外,我希望用户只能在对话框屏幕上控制键盘。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

ModalDialog.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
  }
}

答案 2 :(得分:0)

为InputPanel设置以下属性:

z: 1
parent: Overlay.overlay
focus: true

并为Popup设置以下属性:

modal: false
focus: true