我想设置一个加载器来打开一个QML文件;但似乎不起作用:
Button{//Below Right
width:profilePicture.width/2
height:profilePicture.width/2
x:profilePicture.x+profilePicture.width
y:profilePicture.y+profilePicture.height
contentItem: Image {
source: "Images/freecoins.png"
anchors.fill: parent
Rectangle{
anchors.fill:parent
radius: this.width
border.color: "yellow"
border.width: 2
color: "transparent"
}
}
onClicked: popUpFreeCoinsloader.active = true
Loader{
id: popUpFreeCoinsloader
source: "PopUpFreeCoins.qml"
active: false
focus: true
}
}
我也想设置该QML文件的属性,但不知道该怎么做。 例如,我有属性int a和属性int b,它们是窗口的宽度和高度,如何在loader中初始化它们,就像在这样的组件中初始化一样?:
Component{
PopUP{a:100; b:200}
}
答案 0 :(得分:0)
我不确定你的意思是“似乎不起作用”,因为Loader正常为我工作。代码应该工作。一个简单的例子:
Main.qml:
Window {
visible: true
width: 300
height: 300
Button{
text: "button"
onClicked: loader.active = true
}
Loader{
id: loader
active: false
source: "Testy.qml"
focus: true
}
}
Testy.qml:
import QtQuick 2.7
Rectangle{
width: 200
height: 200
color: "red"
}
我怀疑你的PopUpFreeCoins.qml没有正确实例化,或者宽度和高度都没有。
关于您的第二个问题,请使用sourceComponent
(link)
在我的例子中很容易看到:
修改后的Main.qml:
Window {
visible: true
width: 300
height: 300
Button{
text: "button"
onClicked: loader.active = true
}
Loader{
id: loader
active: false
// load customized component
sourceComponent: rect
focus: true
}
//customized component
Component {
id: rect
Testy {
//customized values
width: 50
height: 50
color: "blue"
}
}
}
或者在你的例子中:
Loader{
id: popUpFreeCoinsloader
sourceComponent: popUp
active: false
focus: true
}
Component{
id: popUp
PopUP{a:100; b:200}
}
答案 1 :(得分:0)
如果您的组件是一个单独的窗口,则可能需要在加载后明确显示它。
即。加载只会使对象可用于程序,但在显示之前它将不可见,就像visible
的{{1}}属性一样,确保显示它。
至于价值转移,你有两个选择
在加载时
Window
这里的值将被写入已加载项目的属性中,即这是一项任务。
使用Loader {
onLoaded: {
item.a = 123;
item.b = 456;
}
}
元素
Binding
这里我们有一个属性绑定,即项的属性绑定到值,具有自动更新和所有常见的属性绑定行为