aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/responsivelayouts/responsivelayouts.qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quick/responsivelayouts/responsivelayouts.qml')
-rw-r--r--examples/quick/responsivelayouts/responsivelayouts.qml160
1 files changed, 160 insertions, 0 deletions
diff --git a/examples/quick/responsivelayouts/responsivelayouts.qml b/examples/quick/responsivelayouts/responsivelayouts.qml
new file mode 100644
index 0000000000..f9ef99612d
--- /dev/null
+++ b/examples/quick/responsivelayouts/responsivelayouts.qml
@@ -0,0 +1,160 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Window {
+ id: appWindow
+
+ visible: true
+ title: qsTr("Responsive layouts with LayoutItemProxy")
+
+ minimumHeight: 500
+ minimumWidth: 250
+
+ //! [item definition]
+ Rectangle {
+ id: contentItem
+ Layout.fillWidth: true
+ implicitHeight: grid.implicitHeight
+ implicitWidth: grid.implicitWidth
+ color: "#00414A"
+
+ GridLayout {
+ anchors.fill: parent
+ id: grid
+ columns: 2
+ anchors.margins: 8
+ Repeater {
+ model: 18
+ Rectangle {
+ Layout.fillWidth: true
+ Layout.margins: 8
+ implicitWidth: 200
+ implicitHeight: width
+ radius: width / 10
+ gradient: Gradient {
+ GradientStop { position: -0.2; color: "#2CDE85" }
+ GradientStop { position: 1.2; color: "#00414A" }
+ }
+ Text {
+ color: "#ffffff"
+ font.pointSize: 22
+ anchors.centerIn: parent
+ text: index
+ }
+ }
+ }
+ }
+ }
+
+ Button {
+ id: a
+ text: "Text"
+ icon.source: "./icons/text.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+
+ Button {
+ id: b
+ text: "Grid 1"
+ icon.source: "./icons/grid.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+
+ Button {
+ id: c
+ text: "Grid 2"
+ icon.source: "./icons/grid.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+
+ Button {
+ id: d
+ text: "Settings"
+ icon.source: "./icons/settings.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+ //! [item definition]
+
+ //! [first layout]
+ ColumnLayout {
+ id: smallLayout
+ anchors.fill: parent
+
+ //! [proxy in flickable]
+ Flickable {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ contentWidth: width
+ contentHeight: gl.implicitHeight
+ clip: true
+ ScrollIndicator.vertical: ScrollIndicator { }
+ LayoutItemProxy {
+ id: gl
+ width: parent.width
+ height: implicitHeight
+ target: contentItem
+ }
+ }
+ //! [proxy in flickable]
+
+ //! [proxy in layout]
+ RowLayout {
+ Layout.fillHeight: false
+ Layout.fillWidth: true
+ Layout.margins: 5
+ //! [layout property on proxy]
+ LayoutItemProxy{ target: a; }
+ //! [layout property on proxy]
+ LayoutItemProxy{ target: b; }
+ LayoutItemProxy{ target: c; }
+ }
+ //! [proxy in layout]
+ }
+ //! [first layout]
+
+ //! [second layout]
+ RowLayout {
+ id: largeLayout
+ anchors.fill: parent
+ ColumnLayout {
+ Layout.minimumWidth: 100
+ Layout.margins: 2
+ LayoutItemProxy{ target: a }
+ LayoutItemProxy{ target: b }
+ LayoutItemProxy{ target: c }
+ //! [spacer item]
+ Item { Layout.fillHeight: true }
+ //! [spacer item]
+ LayoutItemProxy{ target: d }
+ }
+
+ LayoutItemProxy {
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+ target: contentItem
+ }
+ }
+ //! [second layout]
+
+ //! [setting the layout]
+ function setFittingLayout() {
+ if (width < 450) {
+ smallLayout.visible = true
+ largeLayout.visible = false
+ } else {
+ smallLayout.visible = false
+ largeLayout.visible = true
+ }
+ }
+ onWidthChanged: setFittingLayout()
+ Component.onCompleted: setFittingLayout()
+ //! [setting the layout]
+}