Qt QML:两个gridview之间的共享列表模型
我需要在两个gridview之间共享项目的模型列表,因为我需要使用拖放在两个控件之间移动项目。显而易见的解决方案是使用Package,但在我的例子中,我遇到了一个问题:如果项目放在另一个视图上,GridView会显示一个项目应该位于的空白区域。屏幕截图将使问题变得更为严重。如您所见,我通过在两个视图中处理偶数和奇数来添加块,但这会创建您可以看到的列。有人知道如何使块以“正常”顺序出现在视图中,而不带空格 遵循示例代码:Qt QML:两个gridview之间的共享列表模型,qt,qml,Qt,Qml,我需要在两个gridview之间共享项目的模型列表,因为我需要使用拖放在两个控件之间移动项目。显而易见的解决方案是使用Package,但在我的例子中,我遇到了一个问题:如果项目放在另一个视图上,GridView会显示一个项目应该位于的空白区域。屏幕截图将使问题变得更为严重。如您所见,我通过在两个视图中处理偶数和奇数来添加块,但这会创建您可以看到的列。有人知道如何使块以“正常”顺序出现在视图中,而不带空格 遵循示例代码: GridView { id: grid1 cellWidt
GridView {
id: grid1
cellWidth: 80
cellHeight: 80
model: visualDelegateModel.parts.grid1
}
GridView {
id: grid2
cellWidth: 80
cellHeight: 80
model: visualDelegateModel.parts.grid2
}
ListModel {
id: blocksListModel
ListElement { color: "blue" }
ListElement { color: "green" }
ListElement { color: "red" }
ListElement { color: "yellow" }
ListElement { color: "orange" }
ListElement { color: "purple" }
ListElement { color: "cyan" }
ListElement { color: "magenta" }
ListElement { color: "chartreuse" }
ListElement { color: "aquamarine" }
ListElement { color: "indigo" }
ListElement { color: "black" }
ListElement { color: "lightsteelblue" }
ListElement { color: "violet" }
ListElement { color: "grey" }
ListElement { color: "springgreen" }
ListElement { color: "salmon" }
ListElement { color: "blanchedalmond" }
ListElement { color: "forestgreen" }
ListElement { color: "pink" }
ListElement { color: "navy" }
ListElement { color: "goldenrod" }
ListElement { color: "crimson" }
ListElement { color: "teal" }
}
DelegateModel {
id: visualDelegateModel
delegate: Block {}
model: blocksListModel
}
这是块委托:
Package {
id: packageRoot
Item { id: grid1Delegate; Package.name: "grid1"}
Item { id: grid2Delegate; Package.name: "grid2" }
Rectangle {
id: block
width: 72; height: 72
anchors {
horizontalCenter: parent.horizontalCenter;
verticalCenter: parent.verticalCenter
}
color: model.color
radius: 3
state: (index % 2) ? "grid1" : "grid2"
states: [
State {
name: "grid1"
ParentChange { target: block; parent: grid1Delegate }
},
State {
name: "grid2"
ParentChange { target: block; parent: grid2Delegate }
}
]
}
}
请提供详细信息,以描述该问题。GridView中缺少某些部分以获得与您相同的渲染器。您可以使用两个
QSortFilterProxyModel
将一个根模型拆分为两个模型,并使用一些条件来决定在何处显示它。若要移动它,您可以将模型条目移动到根模型中的正确位置,并可能设置一些要更改的角色,最终将在哪个模型中对其进行过滤。感谢您的建议,但该包仅用于创建单个模型,并允许在视图之间轻松移动项目。可以为每个视图创建两个模型而不是拆分,但在这种情况下,在视图之间移动项意味着从模型中删除项并附加到另一个模型,这不是我所需要的…通过更改Block ByText{id:grid1Delegate;宽度:72;高度:72;Text:'Empty 1';Package.name:'grid1'}Text{id:grid2Delegate;宽度:72;高度:72;文本:'Empty 2';Package.name:'grid2'}
您将看到发生了什么。此外,如果您尝试显示visualDelegateModel.parts.grid2.count
,您将获得24
。您在这里没有真正的子模型。包
只允许您为同一模型拥有不同的代理。它们还共享一个上下文,以便它们可以相互引用。那么,您需要什么呢您要做的是,为每个模型条目创建两个项
和一个矩形
。您将矩形
重新分配到这两个项中的一个。然后在grid1中显示两个项中的第一个,在grid2中显示第二个。无论内容如何,它都会被添加并使用一个单元格。