我不明白为什么此代码不起作用:
ApplicationWindow {
id: mainWindow
visible: true
minimumHeight: 1024
minimumWidth: 768
Component.onCompleted: {
console.log(mainWindow.height + " and " + mainWindow.width);
}
}
这将在输出中读取0和0。为什么此代码不起作用?
我已经在另一台计算机上对其进行了测试,它似乎工作正常。我有几个Qt安装。我已经尝试了所有方法,并获得了相同的结果。
答案 0 :(得分:0)
Qml窗口最初是从 0,0 生成的,当它生成时(使用 0,0 ),将执行以下代码
Component.onCompleted: {
console.log(mainWindow.height + " and " + mainWindow.width);
}
之后, minimumHeight 和 minimumWidth 取其值。如果您创建按钮并按下按钮,则可以得到结果 qml:1024和768 。
Button {
id: button
x: 270
y: 237
text: qsTr("Button")
onClicked: console.log(mainWindow.height + " and " + mainWindow.width);
}
如果您需要在启动时获取值,则可以尝试以下代码
onWidthChanged: {
console.log(mainWindow.height + " and " + mainWindow.width);
}
或
onHeightChanged: {
console.log(mainWindow.height + " and " + mainWindow.width);
}
它将始终提供窗口属性值,并在用户手动更改时提供。但是,如果需要获取一次,则可以创建一个计时器或检查窗口何时获得其属性
此外,您可以选中此answer。
答案 1 :(得分:0)
如果您的代码有问题,则认为它是错误的。
import QtQuick 2.9
import QtQuick.Controls 1.4
ApplicationWindow {
id: mainWindow
visible: true
minimumHeight: 1024
minimumWidth: 768
onWidthChanged: {
console.log("onWidthChanged");
}
Component.onCompleted: {
console.log("onCompleted");
}
onVisibleChanged: {
if(visible)
console.log("onVisibleChanged");
}
}
Win10 + Qt 10.1 mingw32
中的输出为:
qml: onWidthChanged
qml: onVisibleChanged
qml: onCompleted
width
将首先被更改。在窗口可见之后,onCompleted
发出了。
因此,如果您在onCompleted
之前测试演示代码onWidthChanged
发出,请提及平台和编译器并报告可能会更好。