我的问题如下:我有一个基于Rectangle的自定义QML对象,我需要执行一些宽带&的javascript函数。创建时该对象的高度 为此,我使用Component.onCompleted来执行javascript,但在此函数中,width和height属性是错误的(如0; 0或0; -30),就像它们尚未创建一样。
代码:
import QtQuick 2.3
import "js/kloggr.js" as Game
Rectangle {
property var kloggr: undefined
MouseArea {
anchors.fill: parent
// outputs the right values (about 400;600)
onClicked: console.log(width+";"+height);
}
Component.onCompleted: {
Game.kloggr = this;
kloggr = new Game.Kloggr(width, height);
console.log(width+";"+height); // outputs 0;-30
}
}
此对象的创建方式如下:
Kloggr {
id: kloggr
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: pauseBtn.top
}
(我删除了代码中不相关的部分)
那么我做错了什么,或者我能做些什么来获得相同的结果呢?
答案 0 :(得分:0)
您忘记设置矩形的宽度和高度......
import QtQuick 2.3
import "js/kloggr.js" as Game
Rectangle {
width: 300
height: 300
property var kloggr: undefined
MouseArea {
anchors.fill: parent
// outputs the right values (about 400;600)
onClicked: console.log(width+";"+height);
}
Component.onCompleted: {
Game.kloggr = this;
kloggr = new Game.Kloggr(width, height);
console.log(width+";"+height); // outputs 0;-30
//now h + w = 300
}
}
如果您使用锚点,请按项目更改矩形,例如
import QtQuick 2.3
import "js/kloggr.js" as Game
Item{
//without W and Height if you don't use the designer, if you use the designer you should set a default size
property var kloggr: undefined
Rectangle{
anchors.fill : parent
MouseArea {
anchors.fill: parent
// outputs the right values (about 400;600)
onClicked: console.log(width+";"+height);
}
Component.onCompleted: {
Game.kloggr = this;
kloggr = new Game.Kloggr(width, height);
console.log(width+";"+height); // outputs 0;-30
}
}//end of rectangle
} //end of item
答案 1 :(得分:0)
我没有发现它是否是一个bug或者什么,但我发现了一个解决方法:而不是使用Component.onCompleted我使用了onVisibleChanged:
onVisibleChanged: {
if (visible && kloggr === undefined) {
Game.kloggr = this;
kloggr = new Game.Kloggr(width, height);
}
}
似乎宽度和高度属性仅在对象设置为可见时有效... 谢谢@yekmen的帮助