I am a newbie in QML. I made thanks to internet ressources this accordion:
Item { default property var contentItem: null property string title: "panel" id: root Layout.fillWidth: true height: 30 Layout.fillHeight: current property bool current: false ColumnLayout { anchors.fill: parent spacing: 0 Rectangle { Drag.active: dragArea.drag.active id: bar Layout.fillWidth: true height: 30 color: root.current ? "#81BEF7" : "#CEECF5" Text { anchors.fill: parent anchors.margins: 10 horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter text: root.title } Text { anchors{ right: parent.right top: parent.top bottom: parent.bottom margins: 10 } horizontalAlignment: Text.AlignRight verticalAlignment: Text.AlignVCenter text: "^" rotation: root.current ? "180" : 0 } MouseArea { id: dragArea anchors.fill: parent cursorShape: Qt.PointingHandCursor drag.axis: Drag.YAxis drag.target: root onReleased: { root.Drag.drop() } onClicked: { if (root.parent.current !== root) { root.current = !root.current; root.parent.currentItem = root; } } } } Rectangle { id: container Layout.fillWidth: true anchors.top: bar.bottom implicitHeight: root.height - bar.height clip: true Behavior on implicitHeight { PropertyAnimation { duration: 100 } } } Component.onCompleted: { if(root.contentItem !== null) root.contentItem.parent = container; } } }
PanelItem.qml
Window { visible: true width: 400; height: 400 ColumnLayout { anchors.fill: parent spacing: 1 id: test property var currentItem: null PanelItem { title: "Panel 1" Rectangle { color: "orange" anchors.fill: parent } } PanelItem { title: "Panel 2" Rectangle { color: "lightgreen" anchors.fill: parent } } PanelItem { title: "Panel 3" Rectangle { color: "lightblue" anchors.fill: parent } } PanelItem { title: "Panel 4" Rectangle { color: "yellow" anchors.fill: parent } } Item { Layout.fillWidth: true Layout.fillHeight: true } } }
main.qml
However, I wanted to be able to change items index (position) thanks to a "drag & drop" technique.
I read that it is not so good and easy to change index in a column layout. So I tried to put my accordion in a ListView but I am lost and it doesn't work at all.
I tried something like that:
Window { visible: true width: 400; height: 400 ListView { id: my_list anchors.fill: parent model: 14 delegate: PanelItem { id: my_delegate title: "Panel 1" Rectangle { color: "orange" anchors.fill: parent } } } }
main.qml
Could someone help me to do and explain what I am doing wrong ?
Thanks a lot !