2016-11-04 4 views
1

У меня есть TextEdit внутри ScrollView. Как я могу реализовать логику так, чтобы ScrollView перемещался, когда пользователь нажимает клавишу со стрелкой вверх или вниз и перемещает текст за пределы ScrollView?Как обновить навигацию QML ScrollView при навигации по ребенку QML TextEdit с помощью клавиш «вверх» и «вниз»

//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++ 
    } 
} 

ответ

2

Вы можете использовать TextArea, что делает именно это для вас. Если вы хотите испечь свой собственный, посмотрите подробный пример в документах TextEdit в подробном описании.

Обратите внимание, что TextEdit не реализует прокрутку, следуя курсору или другим типам поведения, характерным для внешнего вида. Например, чтобы добавить плавную прокрутку, которая следует за курсором:

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) 
     } 
    }