我已将QML的ListView连接到我的C ++模型,并在模型更改时更新,这很酷。但是我不希望在ListView中显示我的数据,而是以自定义方式在矩形中显示(理想情况下是不存在的普通视图)。
我怎么能这样做?
我看到的问题显然是rectangle
不是视图,还有其他普通视图允许自定义绘图。周围有路吗?
附加组件
跟进答案和评论,让我说明为什么我这样做。我有各种信息,如果我使用列表,我将不得不在一个屏幕上使用多个列表,这看起来不太好。我想要实现的是我称之为“文档视图”的内容。标题在这里,标题去那里,数据在这里和页脚。它是我模型数据的自定义表示。
@Folibis,我喜欢你的第一点。似乎做了类似的事情:
Rectangle
{
Text { text: mySingleton.getFruitName() }
Text { text: mySingleton.getFruitPrice() }
}
注意我故意不包括锚点或几何图形以保持对我的问题的关注,但假设价格出现在水果名称旁边。
这是否意味着如果我更新水果名称或模型中完全相同的对象的价格,在GUI中,上面会自动更新?
答案 0 :(得分:0)
您有多种方法可以实现自定义绘图。我无法想象可以向Rectangle提供哪些数据,但无论如何:
Rectangle {
width: mySingleton.getWidth();
height: mySingleton.getHeight();
color: mySingleton.getColor();
}
您可以创建从QQuickPaintedItem
派生的自定义元素。您只需重新实现QQuickPaintedItem::paint(QPainter * painter)
即可绘制自己的矩形。这是创建ow元素的最简单方法,但由于它使用QPainter
而效率不高。
从QQuickItem
创建自定义元素派生程序。您需要重新实现QSGNode * QQuickItem::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData)
。这是一种快速可靠的方式,但需要OpenGL
经验。
也作为(1),但在Canvas
元素上绘画