當我在QML中定義Component
時,我可以定義alias property
來公開QtObjects
的屬性,否則Components
根將隱藏該屬性。在QML組件中與父級分開設置父上下文
特別有趣的是default property alias
構建強大的可重用和適應性Components
。但是沒有通用的方法來改變名稱分辨率,這對於屬性和信號是不利的。
實施例:MyComp1.qml
Item {
id: rootItem
default property alias content: childItem.data
signal sig()
Item {
id: childItem
}
}
main.qml
MyComp {
id: myObj
signal sig1()
onSig1: console.log('here')
Button {
id: button
onClicked: {
parent.sig()
parent.sig1()
}
}
}
button
這裏現在是childItem
一個孩子,但兩個信號:sig()
和sig1()
在rootItem
定義,這將導致一個錯誤。對我設計得很好的Component
的用戶來說,它不是透明的。他需要查看Component
的代碼,以瞭解爲什麼父母按鈕不是myObj/rootItem
,而是實際上是childItem
。這可能會導致錯誤。
因此我正在尋找一種方法來防止它。
對於信號sig()
這將有可能被修改MyComp
和手動childItem
到rootItem
轉發信號:
Item {
id: rootItem
default property alias content: childItem.data
signal sig()
Item {
id: childItem
signal sig()
onSig: rootItem.sig()
}
}
但是,有沒有辦法快捷這一點,所以用戶不需要我們myObj.sig1()
但可能使用parent.sig1()
。
也是一樣的特性,即添加uppon實例:
MyComp {
signal sig1()
property int num: 5
Button {
text: parent.num // <--- Error
}
}
這將是很好,如果性能和信號 uppon實例定義將可爲parent.propertyName
由一個default
添加的對象 - 財產也是,我想。 有沒有辦法(可能會破解這個)?
我真的很難與這個問題的標題。如果您有更好的建議,請通過*編輯*或*評論*。 – derM