根据<javascript expression =“”>

时间:2018-12-29 12:03:11

标签: javascript qml qt5

我很难使用根据某些JavaScript表达式决定使用sourcesourceComponent的加载程序。我尝试过:

    Component {
        id: emptyComponent

        // for debugging, I would usually use Item {≠
        Rectangle {anchors.fill:parent; color: "red"}
    }

    Component {
        id: handStrengthColumnDelegate

        Loader {
            source: styleData.value !== undefined ? 'qrc:/resources/myDelegate.qml' : ''
            sourceComponent: styleData.value === undefined ? emptyComponent : undefined
        }
    }

的想法是,用作表列的委托,我想使用我的自定义委托,以便为相应的行提供数据,如果没有数据,则使用空组件(这是一个不同类型的行,即类别)。

但是,似乎将sourceComponent设置为undefined导致source被忽略了……我想要的是或/或关系。 / p>

我可以将emptyComponent移到一个不同的文件,或者我可以将 Loader 用作myDelegate.qml,而只能使用sourceComponent,但是还有其他方法可以避免这种情况解决方法?

1 个答案:

答案 0 :(得分:0)

引用Qt documentation for the Loader QML Type中的source属性:

  

要卸载当前加载的对象,请将此属性设置为空字符串,或将sourceComponent设置为undefined。将源设置为新URL还将导致卸载由先前URL创建的项目。

这就是为什么将sourceComponent设置为undefined会导致source被忽略的原因-它只是再次卸载该组件。

由于您的emptyComponent为空(出于调试目的,该矩形除外),因此可以根据需要设置styleData.value属性,而不是根据active的值来设置源。 / p>

生成的QML如下:

Component {
    id: handStrengthColumnDelegate

    Loader {
        source: 'qrc:/resources/myDelegate.qml'
        active: styleData.value !== undefined
    }
}