Pregunta

I came across a weird problem when designing my application in QML. The following code works:

TableView {
  itemDelegate: Item {
    function a() {}
    Loader {}
  }
}

I have a bunch of functions, properties, and loaders in this item delegate which is an Item object. Problems arise when I try to reuse this delegate in a ListView. I can't reference it like this:

Item {
    id: myitem
    function a() {}
    Loader {}
}

TableView {
   itemDelegate: myitem
}

error: Unable to assign QQuickItem to QQmlComponent

This is because itemDelegate is a Component:

http://qt-project.org/doc/qt-5/qml-qtquick-controls-tableview.html#itemDelegate-prop

So QML can convert an Item to Component when it's embedded, but not when it's referenced.

And I can't make it a component, since components can't have functions, loaders, properties etc.

How can I reuse my delegate?

¿Fue útil?

Solución

Solved by wrapping the item inside the component:

Component {
   Item{...}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top