Qt `屏幕.像素密度`在非视觉组件中等于0

Qt `屏幕.像素密度`在非视觉组件中等于0,qt,properties,qml,qtquick2,qt-quick,Qt,Properties,Qml,Qtquick2,Qt Quick,我想使用QML中的Screen.pixelDensity来计算视觉组件的大小。为了将元素的属性保留在一个位置(有两个),我创建了一个容器对象: import QtQuick 2.0 Item { readonly property double constantValue: 100 * Screen.pixelDensity property double first property double second: first + constantValue

我想使用QML中的
Screen.pixelDensity
来计算视觉组件的大小。为了将元素的属性保留在一个位置(有两个),我创建了一个容器对象:

import QtQuick 2.0

Item
{
    readonly property double constantValue: 100 * Screen.pixelDensity
    property double first
    property double second: first + constantValue

    // and so on

    Component.onCompleted: console.log(Screen.pixelDensity) // (1)
}
初始化对象时,语句(1)报告
Screen.pixelDensity==0

如果我在main.qml中使用相同的语句:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.0

ApplicationWindow
{
    title: qsTr("title")
    width: 480
    height: 800

    // some visual stuff here

    Component.onCompleted: console.log("testing: "  + Screen.pixelDensity)
}
然后,
Screen.pixelDensity
报告为非零,如预期的那样

为什么属性在第一种情况下会出现错误行为?

组件完成后,屏幕附加对象在项目或项目派生类型内有效。在这些项目中,它指的是项目当前显示的屏幕。

如果项目未显示(这是我从您的问题中理解的),则无法访问信息。。。因此,它显示0