2015-01-21 32 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元素

  • 相關問題