Как сделать полосу прокрутки всегда видимой на Flckable в QML

Я хотел бы сделать Scrollbar.vertical в области Flickable всегда видимым. в настоящее время это видно при нажатии. Также текстовая область перекрывается полосой прокрутки. Как я могу отделить полосу прокрутки с текстовой областью в следующем коде qml введите описание изображения здесь

import QtQuick 2.0
import QtQuick.Controls 2.0

Flickable {
    id: flickable
    anchors.fill: parent


    TextArea.flickable: TextArea {
        text: "The Qt QML module provides a framework for developing applications and libraries with the QML language.
It defines and implements the language and engine infrastructure, and provides an API to enable application developers to
extend the QML language with custom types and integrate QML code with JavaScript and C++.

The Qt QML module provides both a QML API and a C++ API.
Note that while the Qt QML module provides the language and infrastructure for QML applications,
the Qt Quick module provides many visual components, model-view support, an animation framework,
and much more for building user interfaces.
For those new to QML and Qt Quick, please see QML Applications for an introduction to writing QML applications."
        wrapMode: TextArea.Wrap
        font.pixelSize: 20
    }
    ScrollBar.vertical: ScrollBar {
        width: 40
    }
}

3 ответа

Если обновление до Qt 5.9, QtQuick.Controls 2.2 вводит policy свойство, которое может помочь, например

import QtQuick 2.0
import QtQuick.Controls 2.2

Flickable {
    id: flickable
    ...
    ScrollBar.vertical: ScrollBar {
        width: 40
        anchors.left: parent.right // adjust the anchor as suggested by derM
        policy: ScrollBar.AlwaysOn
    }
}

Кажется active - свойство, предложенное BaCaRoZzo, перезаписывается таймером каждые несколько секунд, если оно просто установлено на true, Таким образом, вы можете использовать onActiveChanged сигнал для сброса true каждый раз.

Однако вы также можете отключить его, установив opacity из contentItem к 1. По крайней мере, для меня, это делает трюк.

Чтобы указать свое местоположение: просто закрепите его.

Flickable {
    id: myflickable
    ...
    ScrollBar.vertical: myvertscroll
    clip: true
}

ScrollBar {
    id: myvertscroll
    anchors.left: myflickable.right
    contentItem.opacity: 1
}

Другие решения не работают для меня. Поэтому я попытался перезаписать содержимое элемента. Дополнительно мне пришлось добавить постоянную ширину.

Протестировано с Qt 5.7 и QtQuick.Controls 2.0.

ListView {
    id: listView
    ...

    ScrollBar.vertical: ScrollBar {
        width: 10
        contentItem: Rectangle {
            color: "black"
        }
    }
} 
Другие вопросы по тегам