如何在QML中使用forward To在文本输入上显示光标

时间:2014-04-11 13:27:45

标签: javascript qt qml

我在屏幕上有两个元素,一个Rectangle和一个TextInput。当在矩形上设置activefocus并输入任何内容时,我需要输入TextInput的输入

为此,我使用了curRect.Keys.forwardTo = [curTextbox];

它工作正常,但我也希望在焦点位于矩形上时看到光标。

http://qt-project.org/doc/qt-4.8/qml-textinput.html#cursorVisible-prop

在QT的上述链接中,它说

  

它可以直接在脚本中设置,例如KeyProxy   可能会将密钥转发给它,并且您希望它在此时看起来很活跃   发生了(但实际上没有给予主动关注)。

但在我的情况下,这不会发生。

任何人都可以向我解释为什么会这样,以及如何实现我的目标,即即使 activeFocus 在Rectangle上时显示光标?

即使在输入文本时显示光标,也会很棒。

更新

import QtQuick 1.0

FocusScope{

    width: 400
    height: 400
    TextInput {Rectangle{anchors.fill: parent;color:"#66ff0000"}
        id: mytext
        anchors.top:parent.top
        cursorVisible: true
        width: rect.width
        MouseArea{
            anchors.fill: parent;
            onClicked: mytext.forceActiveFocus()
        }
        Keys.onDownPressed: {
            mytext2.forceActiveFocus();
        }
    }
    TextInput {Rectangle{anchors.fill: parent;color:"#66ff0000"}
        id: mytext2
        anchors.top:mytext.bottom
        cursorVisible: true
        width: rect.width
        MouseArea{
            anchors.fill: parent;
            onClicked: mytext2.forceActiveFocus()
        }

        Keys.onUpPressed: {
            mytext.forceActiveFocus();
        }
    }
    Rectangle {
        id:rect
        width: 360
        height: 360
        color:rect.activeFocus?"#6600ff00":"#660000ff"
        focus: true
        Keys.forwardTo: mytext
        MouseArea{
            anchors.fill: parent;
            onClicked: rect.forceActiveFocus()
        }
    }
    Component.onCompleted: rect.forceActiveFocus();
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

焦点更改会重置cursorVisible属性...因此,当您点击rect时,焦点会从mytext通过forceActiveRecord转移到mytext.cursorVisible,{ {1}}自动设置为false。如果要保持光标可见,则应将其重置为true。这可以通过将rect.MouseArea.onClicked更改为此来完成:

        onClicked: {
            rect.forceActiveFocus();
            mytext.cursorVisible = true;
        }

如果您希望mytext上的光标始终可见,您还可以使用onCursorVisibleChanged处理程序强制它为真。在mytext对象中使用此内容:

    onCursorVisibleChanged: {
        if (!cursorVisible)
            cursorVisible = true;
    }

PS:我发布了一个新的答案,因为添加的细节已经改变了很多......我可能会删除之前的答案。