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);
在 main.cpp 加载 main.qml 我的问题消失了。
【讨论】:
以上是关于QML 的行为取决于使用的监视器的主要内容,如果未能解决你的问题,请参考以下文章
带有监视任务的 Lerna - lerna run --parallel
SSIS 脚本任务到 FTP 文件:在 SSMS 作业活动监视器和手动执行中执行的不同行为