我正在开发应该在移动和桌面平台上运行的应用程序。我发现控件大小在不同屏幕上有所不同的问题:在高密度屏幕中控件太小而在低密度屏幕中相当大。
我可以计算每个屏幕的比例因子(即使用 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 支持,它使情况变得更好,但仍然存在一些问题。以下是应用高 DPI 支持前后来自不同设备的一些主屏幕参数(请参见此处的参数说明):
// 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 应用程序手动设置比例因子?