How to make scrollbar always visible on Flckable in QML

自闭症网瘾萝莉.ら 提交于 2020-12-30 07:49:47

问题


I would like to make Scrollbar.vertical in Flickable area is always visible. currently it is visible upon clicking. Also the text area is overlapping with scroll bar. How can i sepearate scrollbar with text area in the following qml code

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
    }
}

回答1:


If upgrading to Qt 5.9, QtQuick.Controls 2.2 introduces a policy property that can help e.g.

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
    }
}



回答2:


It seems the active-property suggested by BaCaRoZzo is overwritten by a timer every few seconds, if it is just set to true. So you might use the onActiveChanged-signal to reset it to true each time.

However you can also disable it by setting the opacity of the contentItem to 1. At least for me, that does the trick.

To adress your positioning: Just anchor it.

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

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



回答3:


The other solutions did not work for me. So I tried to overwrote the contentItem. Additionally I had to add a constant width.

Tested with Qt 5.7 and QtQuick.Controls 2.0.

ListView {
    id: listView
    ...

    ScrollBar.vertical: ScrollBar {
        width: 10
        contentItem: Rectangle {
            color: "black"
        }
    }
} 


来源:https://stackoverflow.com/questions/42189391/how-to-make-scrollbar-always-visible-on-flckable-in-qml

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!