简体   繁体   English

使用向上和向下键导航子QML TextEdit时如何更新QML ScrollView导航

[英]How to update QML ScrollView navigation when navigating child QML TextEdit with up and down keys

I have a TextEdit inside a ScrollView . 我在ScrollView有一个TextEdit How can I implement logic so that the ScrollView moves when the user presses the up or down arrow key and it moves the text beyond the ScrollView bounds? 我怎样才能实现逻辑,这样的ScrollView ,当用户按下向上或向下箭头键,它会将文本以外的移动ScrollView界限?

//qml
ScrollView {
    id: palGenTextScrollView
    property int scrollBarWidth: 15
    anchors.fill: parent

    MouseArea {
        id: mouseArea
        anchors.fill: parent
        onWheel: {
            if (wheel.modifiers & Qt.ControlModifier){
                if (wheel.angleDelta.y > 0)
                {
                    mainTextEdit.font.pixelSize++
                }
                else
                {
                    mainTextEdit.font.pixelSize--
                }
            }
            else{
                wheel.accepted=false
            }
        }
    }
    TextEdit {
        id: mainTextEdit
        text: fileio.palFileText 
        font.family: "Courier"
        wrapMode: TextEdit.Wrap
        selectByMouse: true
        //when going out of upward bounds: palGenTextScrollView.flickableItem.contentY--
        //when going out of downward bounds: palGenTextScrollView.flickableItem.contentY++
    }
}

You can use TextArea which does exactly that for you. 您可以使用TextArea来为您执行此操作。 If you want to bake your own, take a look at the flickable example in TextEdit 's docs in the detailed description. 如果您想烤自己的东西,请在详细说明中查看TextEdit文档中的可轻弹示例。

Note that the TextEdit does not implement scrolling, following the cursor, or other behaviors specific to a look-and-feel. 请注意,TextEdit不会实现滚动,跟随光标或其他特定于外观的行为。 For example, to add flickable scrolling that follows the cursor: 例如,要添加跟随光标的可滑动滚动:

    Flickable {
        id: flick

        width: 300; height: 200;
        contentWidth: edit.paintedWidth
        contentHeight: edit.paintedHeight
        clip: true

        function ensureVisible(r)
        {
            if (contentX >= r.x)
                contentX = r.x;
            else if (contentX+width <= r.x+r.width)
                contentX = r.x+r.width-width;
            if (contentY >= r.y)
                contentY = r.y;
            else if (contentY+height <= r.y+r.height)
                contentY = r.y+r.height-height;
        }

        TextEdit {
            id: edit
            width: flick.width
            height: flick.height
            focus: true
            wrapMode: TextEdit.Wrap
            onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM