0
说我有一个工具栏QML应用:与自定义属性(没有的SetSource)加载组件
ApplicationWindow {
header: MyTools {
showAdminButtons: userIsAdmin()
}
}
我可以动态地挑选组件用Loader
显示:
ApplicationWindow {
header: Loader {
source: Qt.platform.os=="linux" ? "qrc:/linux/MyTools.qml" : "qrc:/MyTools.qml"
}
}
然而,如果我想为该组件提供自定义属性值(如上面的showAdminButtons
),则必须使用setSource()
方法:
ApplicationWindow {
header: Loader {
Component.onCompleted: {
var qml = Qt.platform.os=="linux" ? "qrc:/linux/MyTools.qml" : "qrc:/MyTools.qml";
setSource(qml, {showAdminButtons:userIsAdmin()});
}
}
}
是否有“仅限QML”的方式为装载程序提供属性,该程序不需要Component.onCompleted
? (我不能完全证明为什么Component.onCompleted
对我来说感觉像是一个非常糟糕的解决方法,但它每次都必须使用它,这与QML的声明性质和JS的程序性质有关。)
我发现[此答案](HTTP: //stackoverflow.com/a/27704424/405017)哪种解决方案我的问题。但是,它似乎只在我从组件的签名中移除属性,而是将它们定义为需要实例化来传递值时才起作用。它阻止了属性别名和默认值的运行。 – Phrogz
与Loader + Qt.platform.os相比,名为“文件选择器”的技术更为出色:http://www.ics.com/blog/mastering-qt-file-selectors – jpnurmi