#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()