редактирование текста qml с помощью ползунка

#qt #qt4 #qml

#qt #qt4 #qml

Вопрос:

Кто-нибудь знает, как создать TextEdit, который можно переносить с помощью ползунка? я пытался это сделать, но у меня возникла проблема с циклом привязки…

код:

 Flickable
    {
        id: flick
        anchors.fill:parent
        contentWidth: edit.paintedWidth
        contentHeight: edit.paintedHeight
        clip: true
        interactive :false
        contentY: slider.y
        function ensureVisible(r)
        {
            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*0.9
            height: flick.height
            focus: true
            wrapMode: TextEdit.Wrap
            onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
            text: defaultText
            color: textColor
            font.family: fontFamily
            font.pointSize: fontSize
            font.bold: bold
            font.italic: italic
            font.overline: overline
            font.underline: underline
            horizontalAlignment: alignment
            selectByMouse:true

        }
    }

    Rectangle
    {
        id: container

        height: multiLineEdit.height
        width:multiLineEdit.width*0.1
        anchors.right:multiLineEdit.right
        anchors.top:multiLineEdit.top
        radius: 4
        opacity: 0.7
        smooth: true
        gradient: Gradient {
            GradientStop { position: 0.0; color: "gray" }
            GradientStop { position: 1.0; color: "white" }
        }

        Rectangle {
            id: slider

            property int value: Math.round(container.y*100/(slider.width-container.width))
            property int tmpVal: 0

            x: 1
            y: flick.visibleArea.yPosition * flick.height//1
            width: parent.width

            //The height will change according to the flickable area (the text area)
            height: (flick.visibleArea.heightRatio > 1) ? (container.height) :(flick.visibleArea.heightRatio*container.height)
            radius: 2
            smooth: true

            color:"black"

                   MouseArea {
                anchors.fill: parent
                drag.target: parent; drag.axis: Drag.YAxis
                drag.minimumY: 0; drag.maximumY: container.height - slider.height
            }
        }

    } 
  

таким образом, я создаю TextEdit и slier в правой части поля TextEdit. теперь ползунок перемещается в соответствии с текстом, но он (слайдер) не управляет полем TextEdit … как я могу добавить это действие? (по-моему, это приводит к циклу привязки)

Комментарии:

1. Можете ли вы опубликовать какой-нибудь пример кода и описать проблему, на которую вы ссылались в своем вопросе?

2. я не хочу, чтобы это было прокруткой с помощью мыши, ТОЛЬКО с помощью ползунка…

Ответ №1:

Возможно, вы могли бы захватить событие нажатия кнопки клавиатуры с пользовательским слотом, если ключевое событие соответствует стрелке влево и вправо, т. Е.

Пожалуйста, взгляните сюда: ссылка на QWidget::grabKeyboard()