提问人:Anon 提问时间:8/18/2014 最后编辑:eyllanescAnon 更新时间:3/25/2021 访问量:6780
QML - 移动到可轻弹的顶部底部
QML - Move to top bottom of flickable
答:
6赞
astre
8/18/2014
#1
您需要计算它并将其设置为 contentY。例如:
Flickable {
width: 200; height: 200
contentWidth: image.width; contentHeight: image.height
Image { id: image; source: "file:///path/toBigImageFile" }
contentY : contentHeight-height
}
评论
0赞
Anon
8/20/2014
好吧,这对我来说是新语法;你能解释一下contentHeight-height是什么吗?这听起来是多余的,你还能用破折号做什么?
1赞
astre
8/20/2014
在这里,我们实际上是从 contentHeight(图像的实际高度)计算 contentY 位置,然后从中减去 height(视图高度)。因此,按照上面的例子,如果图像文件的高度是 768,视图的高度是 200,那么视图的 Y 坐标设置为 568,可以认为是底部。
0赞
Anon
8/20/2014
哦,这是一个减号:D这就解释了;谢谢!
1赞
justengel
9/12/2019
#2
我一直在向 TextArea 添加文本,并希望它保持在底部,除非有人更改滚动位置。
Flickable{
id: flickable
anchors.fill: parent
boundsBehavior: Flickable.DragAndOvershootBounds
flickableDirection: Flickable.VerticalFlick
ScrollBar.vertical: ScrollBar {
id: flickScroll
}
TextArea.flickable: TextArea{
id: monitor
width: parent.width
height: parent.height
readOnly: true
wrapMode: TextArea.Wrap
persistentSelection: true
leftPadding: 6
rightPadding: 6
topPadding: 0
bottomPadding: 0
background: null
}
function currPos(){
return flickable.contentY
}
function setPos(pos){
flickable.contentY = pos;
}
function getEndPos(){
var ratio = 1.0 - flickable.visibleArea.heightRatio;
var endPos = flickable.contentHeight * ratio;
return endPos;
}
function scrollToEnd(){
flickable.contentY = getEndPos();
}
function append(text){
var pos, endPos, value;
value = monitor.text + String(text);
// Limit value size here
endPos = getEndPos();
pos = currPos();
monitor.text = value;
if(pos == endPos){
scrollToEnd();
} else {
setPos(pos);
}
}
}
评论
0赞
Kenn Sebesta
7/23/2021
这是一个非常有帮助的答案。我建议的唯一更改是将 的计算四舍五入。这解决了由于浮点计算的精度而产生的小错误。endPos
评论