在 QML 中重用委托组件

Ale*_*lex 2 qt qml qt5 qqmlcomponent

在 QML 中设计我的应用程序时,我遇到了一个奇怪的问题。以下代码有效:

TableView {
  itemDelegate: Item {
    function a() {}
    Loader {}
  }
}
Run Code Online (Sandbox Code Playgroud)

我在这个 item 委托中有一堆函数、属性和加载器,它是一个 Item 对象。当我尝试在 ListView 中重用这个委托时会出现问题。我不能像这样引用它:

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

TableView {
   itemDelegate: myitem
}

error: Unable to assign QQuickItem to QQmlComponent
Run Code Online (Sandbox Code Playgroud)

这是因为itemDelegate是一个Component

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

因此,QML 可以在嵌入时将 an 转换ItemComponent,但在引用时则不能。

我不能让它成为一个组件,因为组件不能有函数、加载器、属性等。

如何重用我的委托?

Ale*_*lex 5

通过将项目包裹在组件内来解决:

Component {
   Item{...}
}
Run Code Online (Sandbox Code Playgroud)