我在嵌入式Linux Plattform上使用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个项目时,我将它们推到网格的末尾,如下所示:
Taht是我现在的状态。但现在我需要在这个网格中获取类别,我需要能够将新项目推送到每个类别。应该是这样的:
将两个项目添加到红色类别后:
如何在网格中安排容器,容器会在每行末尾自动断开?
解决方案:
GridView{
model: myDesktopModel
delegate: HomeLinkeDelegate { id: homeLinkDelegate }
}
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
的更多信息答案 0 :(得分:3)
据我所知,您无法从QML中选择Grid
项目的位置。您最好使用GridView
并创建自己的自定义QAbstractItemModel
,以便您可以选择在模型中的正确索引处插入项目。或者,正如@GrecKo所提到的,使用ListModel
并调用insert()
函数。
如果您最终选择了QAbstractItemModel
方法,请参阅Using C++ Models with Qt Quick Views了解详情。