我正在开发一款应用程序,它应该可以在移动和桌面平台上运行。我发现的问题是控件的大小在不同的屏幕上会有所不同:在高密度屏幕上,控件太小,在低密度屏幕上则相当大。
我可以为每个屏幕计算比例因子(即使用Android的密度无关像素),并将其用于定义项目的尺寸、边距等,单位为dp:
我可以为每个屏幕计算比例因子(即使用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控件。
因此,我正在寻找一种方法,在不重新定义所有控件的情况下缩放标准控件。
更新1。 我尝试了高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'!)
看起来对于一些高分辨率的显示器(三星平板和小米手机),情况有所改善。在应用高分辨率支持后,这两个设备的DPI接近160。
但Retina显示屏和低密度显示屏的DPI没有改变,屏幕上的物品看起来比它们应该的要大。因此,它只解决了原始问题的一半。也许有人知道如何在运行时手动设置所有Qt应用程序的比例因子?
main()
中尝试使用qputenv("QT_SCALE_FACTOR", "3");
。 - jpnurmi