我可以将矩形连接到C ++模型吗?

时间:2015-01-21 02:30:00

标签: c++ qml

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

我怎么能这样做?

我看到的问题显然是rectangle不是视图,还有其他普通视图允许自定义绘图。周围有路吗?

附加组件

跟进答案和评论,让我说明为什么我这样做。我有各种信息,如果我使用列表,我将不得不在一个屏幕上使用多个列表,这看起来不太好。我想要实现的是我称之为“文档视图”的内容。标题在这里,标题去那里,数据在这里和页脚。它是我模型数据的自定义表示。

@Folibis,我喜欢你的第一点。似乎做了类似的事情:

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

注意我故意不包括锚点或几何图形以保持对我的问题的关注,但假设价格出现在水果名称旁边。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 您可以使用C ++创建自定义项目,例如,从中获取所需的数据。
  2. Rectangle {
        width: mySingleton.getWidth();
        height: mySingleton.getHeight();
        color: mySingleton.getColor();
    }
    
    1. 您可以创建从QQuickPaintedItem派生的自定义元素。您只需重新实现QQuickPaintedItem::​paint(QPainter * painter)即可绘制自己的矩形。这是创建ow元素的最简单方法,但由于它使用QPainter而效率不高。

    2. QQuickItem创建自定义元素派生程序。您需要重新实现QSGNode * QQuickItem::​updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData)。这是一种快速可靠的方式,但需要OpenGL经验。

    3. 也作为(1),但在Canvas元素上绘画