2015-01-21 81 views
0

我已将QML的ListView连接到我的C++模型,并在模型更改很酷时进行更新。不过,我不想在ListView Bur中显示我的数据,而是以矩形中的自定义方式(理想情况下是不存在的普通视图)显示数据。我可以将矩形连接到C++模型吗?

我该怎么做?

我看到明显的问题是rectangle不是一个视图,也允许自定义绘制其他平面图。有没有办法解决它?

附加组件

对答案和评论的后续行动,让我给背景下,为什么我这样做。我有各种信息,如果我使用列表,我将不得不在一个屏幕上使用多个列表,看起来不好。我想要实现的是我称之为“文档视图”。标题在这里,标题去那里,数据在这里和脚注在这里。这是我的模型数据的自定义演示。

@Folibis,我喜欢你的第一点。这似乎是,如果这样做:

Rectangle 
{ 
    Text { text: mySingleton.getFruitName() } 
    Text { text: mySingleton.getFruitPrice() } 
} 

注意我故意不包括锚或几何形状保持对我的问题焦点,但承担的价格旁边的水果名称出现。

这是否意味着如果我更新的水果名称,或在其他型号完全相同的对象,其中在GUI,上面会自动更新的价格是多少?

+0

您可以使用'Flickable'以'Repeater'为模型,如果你不想使用'ListView'(见[这里](http://stackoverflow.com/questions/26669856/howto-flick-a-qml-listview-horizo​​ntal-and-vertical/26840056#26840056))。您仍然拥有模型项目的'delegate'和没有'ListView'功能的轻弹能力。不过问题是:不使用ListView的原因是什么? – BaCaRoZzo 2015-01-21 13:30:23

回答

0

您有几种实现自定义绘图的方法。我无法想象可以向Rectangle提供哪些数据,但无论如何:

  1. 您可以使用C++创建自定义项目,例如singleton从中获取所需的数据。
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元素

  • 相关问题