6

我正在使用 C++ 和 QML 创建一个漂亮的界面。我想要一个“控制台视图”,随着时间的推移会打印出大量的文本。但是,当文本项的文本或 webview 内容增长时,视图不会“向下滚动”。

如何使 text/webview 项目底部的文本始终保持可见?

我试过玩 flickable 和 the_webview.evaluateJavaScript + window.scrollTo ,但我无法让他们做我想做的事。这似乎是一个相当简单的 UI,但我在使用 QML 时遇到了严重的麻烦。

谢谢你的回答。

4

4 回答 4

6

是的,我会使用一个Flickable包含Text对象。每当您将文本添加到 时Text,请检查其paintedHeight,并调整Flickable',contentY如果它变得更大。

于 2011-03-22T18:56:08.997 回答
5

也许您应该考虑使用 aListView并将消息作为视图中的项目。然后你可以使用ListView::positionViewAtEnd.

于 2011-03-22T18:35:20.243 回答
3

funkybro 的回答启发了我的最终解决方案:

function scroll_to_bottom() {
    flickabe_item.contentY = 
        Math.max(0, webview_item.height - flickabe_item.height);
    return;
}

谢谢 !

于 2011-03-22T19:16:43.000 回答
1

我对此的解决方案是垂直翻转内容和 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 }
}
于 2015-07-06T23:30:04.190 回答