2017-07-30 41 views
0

目前我正在通过PyQT与QT框架合作。我创建了一个自定义对象(从QObject继承),并可以按照预期从QML使用它。我还在QML中创建了一个委托,该委托负责此对象的可视化表示,并且也按预期工作。如何在QML中使用ListView和自定义对象?

但是,现在我想在ListView中再次显示这些对象中的几个对象(在委托中定义的表示)(再次在QML中)。我似乎无法弄清楚这是怎么可能的,所以有人能给我一些指示?

提前感谢您的时间。

编辑:为了回应一些反应,我会试着澄清我想通过一个例子来实现更多一点。在这里,我们有一个矩形(这只是为了清晰起见,通常这将是我的自定义对象),它具有一个自定义属性(customText)和一个简单定义布局的委托,两者都可以工作。

ListView { 
    height: 1000 
    model: Rectangle { 
      property string customText: "1.jpg" 
     } 
    delegate: Rectangle { 
     width: 200 
     height: 200 
     Text { 
      anchors.fill: parent 
      text: model.customText 
     } 
    } 
} 

不过,现在我基本上不想一个矩形(这不会使一个ListView有很大的意义),但有几个人在例如列表。我会想到的是,我将不得不改变模式,这样的事情,但后来我得到“不能指定多个值,以奇异特性”

model: [Rectangle { 
      property string customText: "1.jpg" 
     }, 
     Rectangle { 
      property string customText: "1.jpg" 
     }, 
     Rectangle { 
      property string customText: "1.jpg" 
     }] 

请让我知道如果您需要任何进一步信息。

+0

你试过了什么? – GrecKo

+1

为什么不在这里发布与该问题相关的所有代码而不是_explaining_呢? – folibis

+0

其中一种方法是从'QAbstractListModel'继承并定义一个模型,该模型提供这些对象中的每一个的属性。 – Velkan

回答

1

您可以使用ListModelListElement qml类型。定制模型示例实现:

ListModel { 
    id: modelElement 
    ListElement { customText : "1.jpg"} 
    ListElement { customText : "2.jpg"} 
    ListElement { customText : "3.jpg"} 
    ListElement { customText : "4.jpg"} 
} 

ListView { 
    height: 1000 
    model: modelElement 
    delegate: Rectangle { // You can use your custom object here 
     width: 200 
     height: 200 
     Text { 
      anchors.fill: parent 
      text: customText 
     } 
    } 
} 

ListElement表示将使用ListView控件或Repeater项目Ref显示的列表项。

您可以将自定义对象定义为delegate,然后将customText指定为Text元素。

相关问题