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