我正在开发应该在移动和桌面平台上运行的应用程序。我发现控制器的大小在不同的屏幕上会有所不同:在高密度屏幕中,控件太小,而在低密度屏幕中则相当大。Qt Quick Controls 2 Scaling
我可以计算出比例因子每个屏幕(即使用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支持,它使情况更好,但仍然存在一些问题。 下面是从不同的设备主屏幕(see paramter description here)的某些部分参数之前并应用高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的显示器(三星平板电脑和小米手机)更好。高DPI支持申请后,两台设备的DPI接近160。
但是Retina显示屏和低密度显示屏的DPI不会改变,屏幕上的项目看起来应该比它应该更大。所以它只解决了原始问题的一半。也许有人知道如何在运行时为所有Qt应用程序手动设置比例因子?
多年前我问过自己,最后我用了一个类似的方法,然后用自定义dip和sip计算...我仍然不认为它在Qt或QML中构建任何标准 – Xander
因此,您重新定义了所有Qt快速控制2项使用dip和sip?或者你根本不使用Qt Quick Controls 2? –
嗯,实质上是的,每当我定义视觉QML项目的大小或位置以及字体大小的sp时,我都会使用dp。这听起来很愚蠢,但它的工作原理并不简单。但是我使用了全局C++类,并将其注册为QML上下文对象。如果你想我可以发布该类作为答案,因为它在我的私人存储库。 – Xander