QML текстовая прокрутка - PullRequest
4 голосов
/ 22 марта 2011

Я использую C ++ и QML для создания приятного интерфейса. Я хотел бы иметь «вид консоли», где много текста печатается во времени. Однако при увеличении текста текстового элемента или содержимого веб-просмотра представление не «прокручивается вниз».

Как сделать так, чтобы текст в нижней части элемента text / webview всегда оставался видимым?

Я пытался играть с flickable и the_webview.evaluateJavaScript + window.scrollTo, но я не мог заставить их делать то, что я хочу. Это кажется довольно простым элементом пользовательского интерфейса, но у меня серьезные проблемы с QML.

Спасибо за ответ.

Ответы [ 4 ]

4 голосов
/ 22 марта 2011

Да, я бы использовал Flickable, содержащий Text объект. Всякий раз, когда вы добавляете текст в Text, отметьте его paintedHeight и настройте Flickable contentY, если он увеличится.

4 голосов
/ 22 марта 2011

Возможно, вам следует рассмотреть возможность использования ListView и иметь сообщения в качестве элементов в представлении. Тогда вы можете использовать ListView::positionViewAtEnd.

1 голос
/ 22 марта 2011

funkybro ответы вдохновили мое окончательное решение:

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

Спасибо!

0 голосов
/ 07 июля 2015

Мое решение для этого состояло в том, чтобы перевернуть содержимое и 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 }
}
...