有没有办法知道TextArea
滚动到达顶部或底部的时间?我想在聊天客户端中实现动态文本加载:当用户滚动到顶部时,会向文档中添加更多文本。像这样的东西(伪代码):
import QtQuick 2.4
import QtQuick.Controls 1.2
TextArea {
id: chat
onScrolledToTop: text = loadMoreText() + text
}
答案 0 :(得分:3)
Textarea
继承自ScrollView
,其中Flickable
项用于控制可见区域。这样的项目可用作(只读)属性flickableItem
。在其他属性中,Flickable提供contentY
:
这些属性保持当前位于左上角的曲面坐标 Flickable的一角。例如,如果您向上滑动图像100 像素,contentY将是100。
因此,您可以检查此属性更改,并在达到特定阈值后更新您的文本。请注意,您应在设置文本后调整contentY
,以模拟添加。否则,显示的文本将完全是刚刚添加的文本。 OP提出的一个好方法是保存原始contentHeight
并将contentY
设置为更新的contentHeight
与保存的threshold
之间的差异 - 同时考虑应用{ {1}}。
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.3
Window {
visible: true
width: 400
height: 200
TextArea {
id: chat
anchors.fill: parent
property int threshold: 10
text: "Current\ntext\n\\to\nmove\ndown\ndown\ndown
\ndown\ndown\ndown\ndown\ndown\ndown\ndown"
Component.onCompleted: cursorPosition = text.length
flickableItem.onContentYChanged: {
if(flickableItem.contentY <= threshold) {
var oldHeight = flickableItem.contentHeight
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua." + text
flickableItem.contentY = threshold + flickableItem.contentHeight - oldHeight // leave flickable in old position
}
}
}
}
答案 1 :(得分:0)
ScrollView {
width: root.width - ((root.width/10) * 2) - (root.width/15)*2
x: (root.width/10) + root.width/15
height: root.height - (root.height/5)
clip: true
TextArea {
id: textArea
clip: true
width: root.width - ((root.width/10) * 2) - (root.width/15)*2
height: root.height - (root.height/5)
wrapMode: "WrapAtWordBoundaryOrAnywhere"
placeholderText: "inter description"
}
}