【发布时间】:2016-07-14 15:04:09
【问题描述】:
我在嵌入式 Linux 平台上使用 QtQuick 1.1 和 Qt 4.8。我有某种桌面,其中动态创建的矩形排列在一个网格中 - 这个网格在一个 Flickable 内。
Flickable{
anchors.fill: parent
contentHeight: homegrid.height
flickableDirection: Flickable.VerticalFlick
clip:true
Grid{
anchors.left: parent.left
anchors.top: parent.top
columns: 4
flow: GridView.LeftToRight
id: homegrid
//new items get pushed to this grid
}
}
看起来像这样:
当我再创建 2 个项目时,我将它们推到网格的末尾,如下所示:
这是我目前的状态。但是现在我需要在这个网格中获取类别,并且我需要能够将新项目推送到每个类别。应该是这样的:
并且将两个项目添加到红色类别后:
如何将容器排列在网格中,使容器在每行末尾自动断开?
解决方案:
- 使用 GridView
GridView{
model: myDesktopModel
delegate: HomeLinkeDelegate { id: homeLinkDelegate }
}
- 在 C++ 中定义列表
QList<QObject*> objectList;
列表可以排序(按颜色)。
- 注册列表
viewer->rootContext()->setContextProperty("myDesktopModel",QVariant::fromValue(this->objectList));
当 List 被修改时,你必须重新注册它 - GridView 会刷新。
更多关于 GridView 的信息:http://doc.qt.io/qt-4.8/qml-gridview.html#model-prop
更多关于基于QObjectList的模型http://doc.qt.io/qt-4.8/qdeclarativemodels.html#qobjectlist-based-model
【问题讨论】:
-
看起来“应该看起来像”图像与您所说的想要自动中断的内容相矛盾。你的意思是你想要某种颜色的最后一项在该行的最后一项,并且下一个颜色从新行开始?
-
同一颜色的项目应该被分组,当一行没有足够的空间时 - 它应该自动中断(n1之后的最后一张图片)。一行应始终包含 4 个项目(最后一行除外)
-
你有什么问题吗?你尝试了什么,结果如何?在我看来,您想要的是
Grid的正常行为,不需要额外的代码。 -
我需要在类别中分隔网格 - 这意味着当我想添加一个红色项目时,它应该放在最后一个红色项目之后。当我得到一个绿色项目时,它应该放在最后一个绿色项目之后......