【问题标题】:QML Virtual keyboard Hide button not workingQML虚拟键盘隐藏按钮不起作用
【发布时间】:2017-08-21 21:46:30
【问题描述】:

如果我点击键盘 hide 按钮会出现问题。以下是代码:

import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.VirtualKeyboard 2.2

Window {
    visible: true
    width: 600
    height: 500
    title: qsTr("Hello World")

    TextField {
        id: textfield
        anchors.bottom:(inputPanel.visible) ? inputPanel.top : parent.bottom
        color: "#2B2C2E"
        cursorVisible: activeFocus
        selectionColor: Qt.rgba(0.0, 0.0, 0.0, 0.15)
        selectedTextColor: color
    }

    InputPanel {
        id: inputPanel
        z: 89
        anchors.bottom:parent.bottom
        anchors.left: parent.left
        anchors.right: parent.right

        visible: Qt.inputMethod.visible //** Warning here 

    }
}

以下是用例:

  1. 如果我点击 TextField 键盘会按预期弹出,但是当我点击隐藏键盘按钮时它不隐藏

  2. 如果我点击 TextField 键盘按预期弹出,接下来如果我双击 TextField 然后点击隐藏键盘按钮 隐藏

我也收到警告:

QML InputPanel:检测到属性“可见”的绑定循环

请提出建议。

【问题讨论】:

  • 我遇到了类似的问题,但没有错误消息(尽管我没有可见性绑定),但我已经在使用 TextInput,如果我事先双击也没关系,它只是不起作用。我正在按照下面米奇的回答中的示例进行操作。 “OnActiveChanged”事件未命中,因此设置visible: active 将不起作用。 (按钮未将活动设置为假)......就像“隐藏”按钮什么都不做。所以任何其他可能的解决方案都会很棒。

标签: qt keyboard qml qtvirtualkeyboard


【解决方案1】:

basic example 在其active 属性为true 时显示输入面板:

InputPanel {
    id: inputPanel
    z: 89
    y: appContainer.height
    anchors.left: parent.left
    anchors.right: parent.right
    states: State {
        name: "visible"
        /*  The visibility of the InputPanel can be bound to the Qt.inputMethod.visible property,
            but then the handwriting input panel and the keyboard input panel can be visible
            at the same time. Here the visibility is bound to InputPanel.active property instead,
            which allows the handwriting panel to control the visibility when necessary.
        */
        when: inputPanel.active
        PropertyChanges {
            target: inputPanel
            y: appContainer.height - inputPanel.height
        }
    }
    transitions: Transition {
        id: inputPanelTransition
        from: ""
        to: "visible"
        reversible: true
        enabled: !VirtualKeyboardSettings.fullScreenMode
        ParallelAnimation {
            NumberAnimation {
                properties: "y"
                duration: 250
                easing.type: Easing.InOutQuad
            }
        }
    }
    Binding {
        target: InputContext
        property: "animating"
        value: inputPanelTransition.running
    }
}

所以你可以做类似的事情:

InputPanel {
    id: inputPanel
    z: 89
    anchors.bottom:parent.bottom
    anchors.left: parent.left
    anchors.right: parent.right

    visible: active
}

【讨论】:

  • 感谢您的建议,我也这样做了,但它不起作用的主要原因是我使用 Qt.inputMethod.visible,因为它在示例中被建议并且我认为“TextField”存在错误.我找到了一个替代方案,并在下面发布。
【解决方案2】:

我不知道是什么问题,但是当我在 TextInput 中添加 TextField 时,一切都开始工作了,下面是代码:

TextInput {
    width:300
    height:50
    id: textfield
    anchors.bottom:(inputPanel.visible) ? inputPanel.top : parent.bottom
    color: "#2B2C2E"           

    TextField{
        width:parent.width
        height:parent.height
    }

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2017-04-21
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多