// An expander: collapses to zero height and animates open, GNOME-style. // // The child is measured at its natural size and the *section* animates; the // child itself never re-layouts, so opening a 20-row wifi list costs one // height animation rather than twenty. import QtQuick import qs.config Item { id: root property bool expanded: false default property alias content: holder.data clip: true // Column/ColumnLayout skip invisible children, so this also collapses the // surrounding spacing when closed. visible: implicitHeight > 0 implicitHeight: root.expanded ? holder.implicitHeight : 0 Behavior on implicitHeight { NumberAnimation { duration: Theme.durNormal easing.type: Easing.OutCubic } } Item { id: holder anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top implicitHeight: childrenRect.height height: implicitHeight } }