Reusing a delegate component in QML



  • 0 down vote favorite

    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?



  • You just need to wrap your item in a Component:

    @Component {Item{...}}@



  • Thanks so much! It worked.

    I'm new to Qt, so you saved me a lot of time :)

    Thanks again.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.