qt - `Screen.pixelDensity` 在非可视组件中等于 0

标签 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

    // 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 报告为非零。

为什么该属性在第一种情况下行为不当?

最佳答案

QML doc for Screen 中所述

The Screen attached object is valid inside Item or Item derived types, after component completion. Inside these items it refers to the screen that the item is currently being displayed on.

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

关于qt - `Screen.pixelDensity` 在非可视组件中等于 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996576/

相关文章:

c++ - 如何在 iOS 上的 QT/QML 中使用剪贴板

javascript - 如何从对象内部获取属性名称以创建新的属性名称?

c++ - QML 如何为属性的每次更改设置动画? (只有最后一次更改动画可见)

python - 在 KDE Linux 上部署 QtQuick QML Python 项目

c++ - QT ofstream 使用变量作为路径名

html - Qt:如何以纯文本格式打开 Html 文件?

c++ - Qt 没有控制台或终端小部件?

mysql - Hibernate 属性使连接保持事件状态

ios - 访问父数组不返回任何对象

ios - 将 MacOS 更新到 1.015.4 并将 Xcode 更新到 11.4 后,Qt Creator 应用程序无法构建,如何解决?