QtQuick 1.1 浮动矩形

QtQuick 1.1 Floating Rectangles

我在嵌入式 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 个项目时,我将它们推到网格的末尾,如下所示:

这就是我目前的状态。但是现在我需要在这个网格中获取类别,并且我需要能够将新项目推送到每个类别。应该看起来像:

并且在将两个项目添加到红色类别之后:

如何在网格中排列容器,使容器在每一行的末尾自动断开?

解法:

  1. 使用 GridView

GridView{ model: myDesktopModel delegate: HomeLinkeDelegate { id: homeLinkDelegate } }

  1. 在 C++ 中定义列表

QList<QObject*> objectList;

列表可以排序(按颜色)。

  1. 注册列表

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

据我所知,您无法从 QML 选择 Grid 中项目的位置。你最好使用 GridView and creating your own custom QAbstractItemModel so that you can choose insert the items at the correct index in the model. Or, as @GrecKo mentioned, use a ListModel and call the insert() 函数。

如果您最终选择 QAbstractItemModel 方法,请参阅 Using C++ Models with Qt Quick Views 了解更多信息。