Qt/QML Eine ScrollBar für ein TextField erstellen?
Hey,
ich möchte eine ScrollBar in Qt für ein TextField erstellen. Außerdem soll wenn man Text auswählt den man eingegeben hat und Rechts-Klick macht, ein Pop Up Menü angezeigt werden bei dem man Optionen wie z.B "Einfügen" oder "Kopieren" hat.
Wenn ich den Folgenden Code ausführe bekomme ich 2 Fehler:
- qrc:/main.qml:89:26: QML Rectangle: Binding loop detected for property "implicitWidth"
- qrc:/main.qml:89:26: QML Rectangle: Binding loop detected for property "implicitHeight"
Hier die main.qml:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
ApplicationWindow {
id: mainWindow
visible: true
width: 900
height: 600
title: qsTr("Hello World")
TextField {
id: textFieldForURL
width: parent.width/2
height: parent.height/14
y: parent.height/4
x: -scrollBar1.position * width
anchors.centerIn: parent
leftPadding: 8
topPadding: 4
rightPadding: 43
color: "white"
font.pixelSize: parent.height/20
selectionColor: "#3b3d45"
placeholderText: "Type something"
placeholderTextColor: "#3b3f44"
selectByMouse: true
maximumLength: 1000
background: Rectangle {
id: textFieldForURL_Background
color: "black"
radius: 5
Rectangle {
id: clearTextFieldForURL_Background
width: parent.height
height: parent.height
anchors.right: parent.right
color: "black"
}
}
Text {
id: clearTextFieldForURL
height: parent.height
width: parent.height
text: "X"
color: "white"
font.pixelSize: 30
anchors.right: parent.right
leftPadding: 13
MouseArea {
id: clearTextFieldForURL_MouseArea
height: textFieldForURL.height
width: textFieldForURL.height
hoverEnabled: true
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
onClicked: {
textFieldForURL.text = ""
textFieldForURL.forceActiveFocus()
}
onEntered: {
clearTextFieldForURL_Background.color = "#2a2c30"
}
onExited: {
clearTextFieldForURL_Background.color = "black"
}
}
}
ScrollBar {
id: scrollBar1
hoverEnabled: true
active: hovered || pressed
orientation: Qt.Horizontal
size: textFieldForURL_Background.width / textFieldForURL.width
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
contentItem: Rectangle {
implicitWidth: parent.width
implicitHeight: parent.height
radius: width / 2
color: scrollBar1.pressed ? "white" : "#999999"
}
}
}
}
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Programm, programmieren
Hast du dir schon einmal die Beispiele in der Dokumentation angeschaut, z.B. das unter Non-attached Scrollbars? Aber wo ich mir deinen Code gerade so anschaue, wundere ich mich: Ein Text in einem TextField? Nimm doch gleich eine TextArea-Komponente und pack diese in ein ScrollView (Beispiel).
Bezüglich des Kontextmenüs schau hier.
Ich benutze in meinem Projekt anstatt dem Text im TextField ein Image, ich habe den Code extra etwas kürzer gemacht damit er übersichtlicher ist.
Das Kontextmenü habe ich erstellt bekommen. Das was nicht geht ist die ScrollBar.. wird zwar angezeigt aber funktioniert nicht. Ich habe mir die Dokumentation von Non-attached Scrollbars angeschaut