我正在开发应该在移动和桌面平台上运行的应用程序。我发现控件尺寸在不同屏幕上有所不同的问题:在高密度屏幕中控件太小而在低密度屏幕中则相当大。
我可以计算每个屏幕的比例因子(即使用Android的密度无关像素)并用它来定义dp
中的项目大小,边距等:
ApplicationWindow {
...
property real dp: Screen.pixelDensity * 10 * 2.54 / 160
Item {
width: 50*dp
height: 50*dp
...
Label {
font.pixelSize: 16*dp
...
}
}
}
它工作得很好,但似乎Qt Quick Controls 2中标准控件的大小以像素为单位定义,因此它们不会缩放。我看到的唯一方法是使用dp
而不是像素重新定义Qt Quick Controls 2中的所有控件。
所以我正在寻找缩放标准控件的方法,而不是重新定义它们。
UPD1。 我已经尝试过高DPI支持,它使情况更好但仍有一些问题。 以下是应用High-DPI支持之前和之后来自不同设备的主屏幕(see paramter description here)的一些参数:
// samsung tab t-280 without high dpi support
devicePixelRatio 1
geometry QRect(0,0 800x1280)
logicalDotsPerInch 95.85
physicalDotsPerInch 216.458
physicalSize QSizeF(94, 150) (7')
// samsung tab t-280 with high dpi support
devicePixelRatio 1.33125
geometry QRect(0,0 601x962)
logicalDotsPerInch 72
physicalDotsPerInch 162.648
physicalSize QSizeF(94, 150) (7')
// xiaomi redmi 2 without high dpi support
devicePixelRatio 1
geometry QRect(0,0 720x1280)
logicalDotsPerInch 144
physicalDotsPerInch 315.48
physicalSize QSizeF(58, 103) (4.6')
// xiaomi redmi 2 with high dpi support
devicePixelRatio 2
geometry QRect(0,0 360x640)
logicalDotsPerInch 72
physicalDotsPerInch 157.74
physicalSize QSizeF(58, 103) (4.6')
// macbook pro retina 13' without high dpi support
devicePixelRatio 2
geometry QRect(0,0 1280x800)
logicalDotsPerInch 72
physicalDotsPerInch 113.5
physicalSize QSizeF(286.449, 179.031) (13')
// macbook pro retina 13' with high dpi support
devicePixelRatio 2
geometry QRect(0,0 1280x800)
logicalDotsPerInch 72
physicalDotsPerInch 113.5
physicalSize QSizeF(286.449, 179.031) (13')
// generic 20' display without high dpi support
devicePixelRatio 1
geometry QRect(0,0 1280x1024)
logicalDotsPerInch 72
physicalDotsPerInch 72
physicalSize QSizeF(451.556, 361.244) (22.6')
// generic 20' display with high dpi support
devicePixelRatio 1
geometry QRect(0,0 1280x1024)
logicalDotsPerInch 72
physicalDotsPerInch 72
physicalSize QSizeF(451.556, 361.244) (22.6')
// asus zenbook 13' without high dpi support
devicePixelRatio 1
geometry QRect(0,0 1366x768)
logicalDotsPerInch 96
physicalDotsPerInch 71.9833
physicalSize QSizeF(482, 271) (21.6'!)
// asus zenbook 13' with high dpi support
devicePixelRatio 1
geometry QRect(0,0 1366x768)
logicalDotsPerInch 96
physicalDotsPerInch 71.9833
physicalSize QSizeF(482, 271) (21.6'!)
对于某些Hight-DPI显示器(三星平板电脑和小米手机),情况似乎变得更好。在应用高DPI支持后,两种设备的DPI都接近160。
但Retina显示器和低密度显示器的DPI没有变化,屏幕上的项目看起来比应有的大。所以它只能解决原问题的一半。也许有人知道如何在运行时为所有Qt应用程序手动设置比例因子?
答案 0 :(得分:2)
似乎从Qt 5.6版开始,可能有一个更好的解决方案,用于平台特色扩展。
Qt Quick Controls 2 https://doc.qt.io/qt-5/qtquickcontrols2-highdpi.html
中的高DPI支持我希望有所帮助。
答案 1 :(得分:1)
我遇到了同样的问题,发现jpnurmi的答案最有帮助:添加
qputenv("QT_SCALE_FACTOR", "3");
在创建应用程序实例之前,在main()中。 对于Retina显示器来说,0.75的因子对我来说非常有效,其中对照实际上太大了。