为什么此代码无法在QML中查找窗口大小?

时间:2018-07-02 17:38:31

标签: qt qml

我不明白为什么此代码不起作用:

ApplicationWindow {

    id: mainWindow
    visible: true
    minimumHeight: 1024
    minimumWidth: 768

    Component.onCompleted: {
        console.log(mainWindow.height + " and " + mainWindow.width);
    }

}

这将在输出中读取0和0。为什么此代码不起作用?

我已经在另一台计算机上对其进行了测试,它似乎工作正常。我有几个Qt安装。我已经尝试了所有方法,并获得了相同的结果。

2 个答案:

答案 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发出,请提及平台和编译器并报告可能会更好。