我很难使用根据某些JavaScript表达式决定使用source
或sourceComponent
的加载程序。我尝试过:
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
,但是还有其他方法可以避免这种情况解决方法?
答案 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
}
}