Qt 如何更改QML应用程序的逻辑DPI?

Qt 如何更改QML应用程序的逻辑DPI?,qt,qml,dpi,Qt,Qml,Dpi,我想控制Qt 5.2.1QML/C++应用程序中所有文本元素的点大小到像素的缩放 我有一个具有目标显示属性(如宽度、高度和点间距)的QML单体组件,它可以计算常用尺寸的适当像素大小,例如触摸屏按钮的建议像素大小。这对于我编写的控件很好,但是Text元素有一个非常好的font.pointSize,如果我可以设置用于文本缩放的逻辑DPI,我会使用它 在96 DPI开发屏幕上调试时,我使用它来模拟屏幕DPI非常不同的目标设备。例如,我希望运行的应用程序以1280x720 133DPI显示器为目标,并具

我想控制Qt 5.2.1QML/C++应用程序中所有文本元素的点大小到像素的缩放

我有一个具有目标显示属性(如宽度、高度和点间距)的QML单体组件,它可以计算常用尺寸的适当像素大小,例如触摸屏按钮的建议像素大小。这对于我编写的控件很好,但是Text元素有一个非常好的font.pointSize,如果我可以设置用于文本缩放的逻辑DPI,我会使用它

在96 DPI开发屏幕上调试时,我使用它来模拟屏幕DPI非常不同的目标设备。例如,我希望运行的应用程序以1280x720 133DPI显示器为目标,并具有如下元素:

Text { font.pointSize: 72; text: “Xy” }
显示133像素高的文本,而不是96像素高的文本,因为操作系统告诉Qt我连接了一个96 DPI的监视器。我想覆盖应用程序的逻辑DPI缩放

我可以通过QGUI应用程序屏幕列表查看logicalDotsPerInchX。关于如何获得逻辑DPI,有大量文档。但是我找不到任何关于如何改变它的信息


如何更改Qt应用程序的逻辑DPI?

我认为您不能简单地更改QScreen类中的DPI值(只有公共getter方法)。 如果您修改QScreen类并添加一个公共setter或其他东西,然后重新编译Qt,可能会有一些“黑客”来解决这个问题,但这可能需要一些工作,并且需要很多时间

另一个解决方案可能是在字体大小中添加比例因子?我不知道你有多少,但这可以简单地在QML中完成,我甚至在生产设置中使用类似的东西来根据设备适当地调整字体和其他大小。
您可以
使用Screen.pixelDensity
或定义自定义QML属性并将其乘以所有字体大小?如果这样做,您可以在应用程序运行时动态更改大小。

我希望不是这样,但您是正确的。我最终得到了一个与你的建议类似的解决方案;我登记C++单件,追踪DPI并为PT、MM和IN(CH)提供常数。例如:Text{Text:'hi';font.pixelSize:24*UI.pt}Qt5.5和5.6中的高DPI支持改善了问题,但如果比例因子不是整数,则存在锯齿问题。我的类很容易使用,所以我不需要高DPI支持,但我在做嵌入式开发;高DPI非常适合桌面应用。我认为这取决于平台插件(例如,对于X windows,它将是libxcb)如何从X服务器获取DPI,以及您是否可以覆盖它,例如在命令行上?你有没有找到解决这个问题的好办法?我正在为嵌入式linux设备的高DPI显示器上交叉编译,出于某种原因,目标应用程序似乎认为它处于高DPI环境中(不是我想要的)