我正在使用C和QML来创建一个漂亮的界面 . 我希望有一个“控制台视图”,随着时间的推移打印出足够的文本 . 但是,当文本项或webview内容的文本增长时,视图不会“向下滚动” .
如何使text / webview项目底部的文本始终保持可见?
我试过玩flickable和the_webview.evaluateJavaScript window.scrollTo,但是我无法让他们做我想做的事 . 这似乎是一个相当简单的UI,但我在使用QML时遇到了严重的麻烦 .
谢谢你的回答 .
也许您应该考虑使用 ListView 并将消息作为视图中的项目 . 然后你可以使用 ListView::positionViewAtEnd .
ListView
ListView::positionViewAtEnd
是的我会使用包含 Text 对象的 Flickable . 每当你向 Text 添加文本时,检查它的 paintedHeight ,并调整 Flickable 的 contentY ,如果它有更大的 .
Text
Flickable
paintedHeight
contentY
funkybro的答案启发了我的最终解决方案:
function scroll_to_bottom() { flickabe_item.contentY = Math.max(0, webview_item.height - flickabe_item.height); return; }
谢谢 !
我的解决方案是垂直翻转内容和Flickable . 这样,文本以正确的方式结束,并自然地锚定在可滑动区域的底部 .
由于OpenGL在幕后处理变换,因此它可能更有效 .
Flickable { id: flick anchors.fill: parent contentHeight: text.height Text { id: text width: parent.width transform: Scale { yScale: -1; origin.y: text.height/2 } } transform: Scale { yScale: -1; origin.y: flick.height/2 } }
4 回答
也许您应该考虑使用
ListView
并将消息作为视图中的项目 . 然后你可以使用ListView::positionViewAtEnd
.是的我会使用包含
Text
对象的Flickable
. 每当你向Text
添加文本时,检查它的paintedHeight
,并调整Flickable
的contentY
,如果它有更大的 .funkybro的答案启发了我的最终解决方案:
谢谢 !
我的解决方案是垂直翻转内容和Flickable . 这样,文本以正确的方式结束,并自然地锚定在可滑动区域的底部 .
由于OpenGL在幕后处理变换,因此它可能更有效 .