Я хочу создать многоразовый компонент, в котором я мог бы передать модель, т.е.
["red", "green", "blue", "black", "orange", "pink", "gray", "navy", "magenta"]
И это заполнило бы Grid
прямоугольниками данных модели. И если в модели больше, чем, скажем, 6 элементов, она заполнит другую «страницу».
В настоящее время я использую StackLayout
, имею 2 элемента Grid
и Repeater
внутри них, и я разделил свою модель на 2:
model: ["red", "green", "blue", "black", "orange", "pink"]
model: ["gray", "navy", "magenta"]
Заполнить каждую «страницу» прямоугольниками.
Написание логики для динамического разделения модели на отдельные части для каждой страницы кажется слишком сложным. Я пробовал GridView
, но не смог найти важные свойства, как в Grid
:
topPadding: 10
bottomPadding: 10
leftPadding: 20
rightPadding: 20
spacing: 10
columns: 2
Источник моего примера:
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Rectangle {
id: mainArea
width: 400
height: 400
color: "beige"
StackLayout {
id: stackLayout
anchors.fill: parent
currentIndex: 0
Grid {
anchors.fill: parent
topPadding: 10
bottomPadding: 10
leftPadding: 20
rightPadding: 20
spacing: 10
columns: 2
property int maxRows: 3
Repeater {
model: ["red", "green", "blue", "black", "orange", "pink"]
Rectangle {
width: (parent.width - parent.leftPadding - parent.rightPadding - parent.spacing) / parent.columns
height: (parent.height - parent.topPadding - parent.bottomPadding - (parent.maxRows - 1) * parent.spacing) / parent.maxRows
color: modelData
}
}
}
Grid {
anchors.fill: parent
topPadding: 10
bottomPadding: 10
leftPadding: 20
rightPadding: 20
spacing: 10
columns: 2
property int maxRows: 3
Repeater {
model: ["gray", "navy", "magenta"]
Rectangle {
width: (parent.width - parent.leftPadding - parent.rightPadding - parent.spacing) / parent.columns
height: (parent.height - parent.topPadding - parent.bottomPadding - (parent.maxRows - 1) * parent.spacing) / parent.maxRows
color: modelData
}
}
}
}
}
Button {
anchors.bottom: mainArea.verticalCenter
anchors.bottomMargin: 5
anchors.left: mainArea.right
text: "<"
onClicked: stackLayout.currentIndex = 0
}
Button {
anchors.top: mainArea.verticalCenter
anchors.topMargin: 5
anchors.left: mainArea.right
text: ">"
onClicked: stackLayout.currentIndex = 1
}
}
ListModel
? - person derM   schedule 19.09.2017ListModel
будет еще сложнее. - person Eligijus Pupeikis   schedule 19.09.2017DelegateModel
может быть быстрее, если вы замените его на C++...ProxyModel
, напримерQSortFilterProxyModel
, или модель не-так-идентичности-прокси, но для последнего требуетсяListModel
afaik. - person derM   schedule 19.09.2017