如何使QML中的Flckable上始终显示滚动条

时间:2017-02-12 15:25:27

标签: qt qml flickable

我想让Flickable区域中的Scrollbar.vertical始终可见。目前点击时可见。文本区域也与滚动条重叠。如何在以下qml代码enter image description here

中将滚动条与文本区域分隔开来
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 个答案:

答案 0 :(得分:6)

如果升级到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
    }
}

答案 1 :(得分:3)

似乎 BaCaRoZzo 建议的active - 属性每隔几秒被一个计时器覆盖,如果它只是设置为true。 因此,您可以使用onActiveChanged - 信号每次将其重置为true

但是你也可以通过将opacity的{​​{1}}设置为1来禁用它。至少对我来说,这就是诀窍。

要解决您的定位问题:只需将其锚定即可。

contentItem

答案 2 :(得分:0)

其他解决方案对我不起作用。所以我试图改写contentItem。另外,我必须添加一个恒定的宽度。

经过Qt 5.7和QtQuick.Controls 2.0的测试。

ListView {
    id: listView
    ...

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