QML 的行为取决于使用的监视器

Posted

技术标签:

【中文标题】QML 的行为取决于使用的监视器【英文标题】:QML's behavior depending on monitor used 【发布时间】:2017-07-27 13:37:21 【问题描述】:

我在 Ubuntu 14.04 上使用 Qt 的示例 Qt Quick Controls 2 和 Qt v5.7,我观察到不同的显示行为,具体取决于我显示的显示器。

我有 2 台显示器:笔记本电脑的内部显示器和外部显示器。两者都是 1920 x 1080。

当我在笔记本电脑的显示器上显示应用程序时,我观察到:

当我在外接显示器上显示应用程序时,我观察到:

而我唯一要做的就是从一台显示器拖到另一台显示器。

外接显示器的显示不错,笔记本电脑的显示不好。

我在所有 QtQuick 应用程序中都观察到了这种行为,并且我没有修改示例应用程序 Qt Quick Controls 2 的代码。

知道发生了什么吗?

----------------------------编辑----

我使用了下面的代码,发现我的内部显示器(Screen.width x Screen.height)被 QML 视为 960 x 540,而我的外部屏幕被视为 1920 x 1080。我的内部屏幕也应该是 960 x 540!

知道为什么 QML 认为我的内部屏幕是 960 x 540,而实际上应该是 1920x1080?

MouseArea

    anchors.fill: parent
    onClicked:
    
        console.log("name  = "                  + Screen.name)
        console.log("width  = "                 + Screen.width)
        console.log("height  = "                + Screen.height)
        console.log("desktopAvailableWidth  = " + Screen.desktopAvailableWidth)
        console.log("desktopAvailableHeight = " + Screen.desktopAvailableHeight)
        console.log("pixelDensity   = "         + Screen.pixelDensity )
        console.log("virtualX = "               + Screen.virtualX)
        console.log("virtualY = "               + Screen.virtualY)
    
  

【问题讨论】:

我相信您正在将应用程序作为全屏显示在机器人显示器上。您可以尝试运行创建新QtQuick app 时将获得的默认应用程序。这将有一些硬编码的分辨率。比较这两个输出,看看你是否得到相同的差异。 字体大小是点还是像素?阅读:doc.qt.io/qt-5/qtquickcontrols2-highdpi.htmldoc.qt.io/qt-5/highdpi.htmldoc.qt.io/qt-5/scalability.html @PraveenKumar:您建议使用哪个函数来获得分辨率?这里有点失落 【参考方案1】:

试试这个代码来获得屏幕分辨率:

import QtQuick 2.8
import QtQuick.Window 2.2

Window 
visible: true
width: 640
height: 480
title: qsTr("Hello World")


MouseArea 
    anchors.fill: parent
    onClicked: 

    console.log("Height = " + Screen.desktopAvailableHeight)
    console.log("Width  = " + Screen.desktopAvailableWidth)
    
  

【讨论】:

MouseArea::onClick() 两个屏幕都返回 2815x1068。这比我的每个屏幕分辨率 (1920x1080) 都大...很奇怪,不是吗? 我已经更新了你的代码(参见我最初的帖子中的编辑),QML 认为我的内部屏幕是 960 x 540,而它应该是 1920x1080!外屏没问题。 这意味着两个屏幕的屏幕分辨率不同。 两个屏幕实际上具有相同的分辨率 (1920x1080),我可以在 系统设置 中仔细检查。嗯,这很奇怪...... 感谢@Praveen Kumar,你真的帮我查明了我的问题。【参考方案2】:

这是因为我使用的是 HighDpiScaling 选项。

当我摆脱线

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

ma​​in.cpp 加载 ma​​in.qml 我的问题消失了。

【讨论】:

以上是关于QML 的行为取决于使用的监视器的主要内容,如果未能解决你的问题,请参考以下文章

带有监视任务的 Lerna - lerna run --parallel

SSIS 脚本任务到 FTP 文件:在 SSMS 作业活动监视器和手动执行中执行的不同行为

Make标签在多个监视器上的xmonad中表现得像工作区行为

SQL Server 性能监视和优化工具

恶意代码分析实战-行为监控

Node.js 扩展时间监听器:文件监视器