2023-01-25 10:01:20 +00:00
|
|
|
// Copyright (C) 2023 The Qt Company Ltd.
|
2024-02-22 14:51:16 +00:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
2023-01-25 10:01:20 +00:00
|
|
|
// This example was created for the blog post about responsive layouts:
|
|
|
|
// https://www.qt.io/blog/responsive-layouts-in-qt
|
|
|
|
|
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Layouts
|
|
|
|
import QtQuick.Window
|
|
|
|
import QtQuick.Controls
|
|
|
|
|
|
|
|
Window {
|
|
|
|
id: window
|
|
|
|
|
|
|
|
width: 700
|
|
|
|
height: 800
|
|
|
|
|
|
|
|
minimumHeight: 500
|
|
|
|
minimumWidth: 200
|
|
|
|
|
|
|
|
title: "Window: (" + width + "x" + height + ")"
|
|
|
|
visible: true
|
|
|
|
|
|
|
|
Component {
|
|
|
|
id: delegate
|
|
|
|
Rectangle {
|
|
|
|
width: listView.width
|
|
|
|
height: 70
|
|
|
|
Rectangle {
|
|
|
|
id: circ
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
height: 50
|
|
|
|
width: 50
|
|
|
|
radius: 25
|
|
|
|
color: "#c8c8c8"
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
anchors.left: circ.right
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.bottom: circ.verticalCenter
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
anchors.rightMargin: 90
|
|
|
|
anchors.bottomMargin: 5
|
|
|
|
height: 11
|
|
|
|
color: "#c8c8c8"
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
anchors.left: circ.right
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.top: circ.verticalCenter
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
anchors.rightMargin: 90
|
|
|
|
anchors.topMargin: 5
|
|
|
|
height: 11
|
|
|
|
color: "#c8c8c8"
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
height: 1
|
|
|
|
color: "#eaeaea"
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
width: 1
|
|
|
|
color: "#eaeaea"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ListView {
|
|
|
|
id: listView
|
|
|
|
z: 2
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: true
|
|
|
|
Layout.minimumWidth: 300
|
|
|
|
Layout.maximumWidth: 550
|
|
|
|
|
|
|
|
model: 20
|
|
|
|
delegate: delegate
|
|
|
|
|
|
|
|
TapHandler {
|
|
|
|
onTapped: swipeView.currentIndex = 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GridLayout {
|
|
|
|
z: 2
|
|
|
|
id: detailView
|
|
|
|
|
|
|
|
Layout.minimumWidth: 250
|
|
|
|
Layout.fillHeight: false
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.leftMargin: 15
|
|
|
|
Layout.rightMargin: 15
|
|
|
|
Layout.alignment: Qt.AlignTop
|
|
|
|
|
|
|
|
columns: Math.max(width,100)/10
|
|
|
|
columnSpacing: 0
|
|
|
|
rowSpacing: 10
|
|
|
|
Rectangle {
|
|
|
|
Layout.columnSpan: detailView.columns
|
|
|
|
Layout.fillWidth: true
|
|
|
|
height: 300
|
|
|
|
color: "#c8c8c8"
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
Layout.columnSpan: detailView.columns
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: false
|
|
|
|
height: 10
|
|
|
|
}
|
|
|
|
Repeater {
|
|
|
|
model: 1000
|
|
|
|
Rectangle {
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: false
|
|
|
|
height: 10
|
|
|
|
color: "#c8c8c8"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
LayoutChooser {
|
|
|
|
id: layoutChooser
|
|
|
|
width: parent.width
|
|
|
|
height: parent.height
|
|
|
|
|
|
|
|
layoutChoices: [
|
|
|
|
smallLayout,
|
|
|
|
largeLayout
|
|
|
|
]
|
|
|
|
|
|
|
|
criteria: [
|
|
|
|
window.width < listView.Layout.minimumWidth + detailView.Layout.minimumWidth + 20,
|
|
|
|
true
|
|
|
|
]
|
|
|
|
|
|
|
|
property Item smallLayout: ColumnLayout {
|
|
|
|
parent: layoutChooser
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width
|
|
|
|
|
|
|
|
SwipeView {
|
|
|
|
id: swipeView
|
|
|
|
|
|
|
|
Layout.fillHeight: true
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Item {
|
|
|
|
ColumnLayout {
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width
|
|
|
|
|
|
|
|
spacing: 0
|
|
|
|
Rectangle {
|
|
|
|
height: 50
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
height: 1
|
|
|
|
color: "#eaeaea"
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
|
|
|
LayoutItemProxy { target: listView }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Item {
|
|
|
|
ColumnLayout {
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width
|
|
|
|
Rectangle {
|
|
|
|
height: 50
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
|
|
|
Text {
|
|
|
|
id: im
|
|
|
|
FontLoader {
|
|
|
|
id: materialFont
|
|
|
|
source: "https://github.com/google/material-design-icons/blob/master/font/MaterialIcons-Regular.ttf?raw=true"
|
|
|
|
}
|
|
|
|
font.family: materialFont.font.family
|
|
|
|
font.weight: materialFont.font.weight
|
|
|
|
font.pixelSize: 32
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
text: String.fromCodePoint(0xe5c4)
|
|
|
|
color: "#010101"
|
|
|
|
TapHandler {
|
|
|
|
onTapped: { swipeView.currentIndex = 0; }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
height: 1
|
|
|
|
color: "#eaeaea"
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
|
|
|
|
|
|
|
LayoutItemProxy { target: detailView }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
property Item largeLayout: ColumnLayout {
|
|
|
|
parent: layoutChooser
|
|
|
|
height: parent.height
|
|
|
|
width: parent.width
|
|
|
|
|
|
|
|
spacing: 0
|
|
|
|
Rectangle {
|
|
|
|
height: 50
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
height: 1
|
|
|
|
color: "#eaeaea"
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
|
|
|
|
|
|
|
RowLayout {
|
|
|
|
spacing: 0
|
|
|
|
LayoutItemProxy { target: listView }
|
|
|
|
LayoutItemProxy { target: detailView }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|