2017-02-12 6 views
0

Ich möchte Scrollbar.vertical im Flickable Bereich immer sichtbar machen. Zur Zeit ist es beim Anklicken sichtbar. Auch der Textbereich überlappt mit der Bildlaufleiste. Wie kann ich sepearate Scrollbar mit Textbereich in dem folgenden qml Code enter image description hereWie Scrollbar immer sichtbar auf Flckable in 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 
    } 
} 
+0

Sie können einfach ein "eigenständiges" Element erstellen und es steuern, indem Sie an die Eigenschaften von flickable binden, anstatt das standardmäßig eingebaute Verhalten zu verwenden. – dtech

+0

@ddriver: das ist eine einfache Lösung. aber ich versuche, die Standard-effektiv zu verwenden – Bupa

+1

Sie können versuchen, 'active: true' zu ​​setzen. Laut der Dokumentation ist es wahr, wenn die Bildlaufleiste sichtbar ist. Es wird z.B. [Sichtbarkeit der Scrollbalken voneinander abhängig machen] (http://doc.qt.io/qt-5/qml-qtquick-controls2-scrollbar.html#binding-the-active-state-of-horizontal-and- vertikale Bildlaufleisten). – BaCaRoZzo

Antwort

2

Es scheint die active -property von vorgeschlagen BaCaRoZzo durch einen Timer alle paar Sekunden überschrieben wird, wenn es nur auf true gesetzt. Sie könnten also das onActiveChanged-Signal verwenden, um es jedes Mal auf true zurückzusetzen.

Sie können es aber auch deaktivieren, indem Sie die opacity der contentItem auf 1 setzen. Zumindest für mich, das macht den Trick.

Um Ihre Positionierung zu adressieren: Einfach verankern.

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

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

Wenn auf Qt 5.9 aktualisieren, führt QtQuick.Controls 2.2 eine policy Eigenschaft, die beispielsweise helfen kann

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