我很难使用基于source或sourceComponent的加载程序,这取决于某些javascript表达式。我试过这个:
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被忽略.我想要的是两个人之间的关系。
我可以将emptyComponent移动到一个不同的文件,或者我可以使用myDelegate.qml的加载程序,并且只使用sourceComponent,但是没有这样的解决方法,还有其他方法吗?
发布于 2018-12-29 13:37:14
引用加载器QML类型的Qt文档中有关source属性的内容:
若要卸载当前加载的对象,请将此属性设置为空字符串,或将sourceComponent设置为未定义。将源设置为新URL还将导致卸载由前一个URL创建的项。
这就是为什么将sourceComponent设置为undefined导致source被忽略的原因--它只是简单地再次卸载组件。
由于您的emptyComponent是空的(除了用于调试目的的矩形之外),所以可以设置active属性,而不是根据styleData.value的值设置源。
得到的QML如下所示:
Component {
id: handStrengthColumnDelegate
Loader {
source: 'qrc:/resources/myDelegate.qml'
active: styleData.value !== undefined
}
}https://stackoverflow.com/questions/53969337
复制相似问题