Qt Quick Controls 2缩放

时间:2017-02-08 14:02:18

标签: android qt qtquick2 qtquickcontrols2

我正在开发应该在移动和桌面平台上运行的应用程序。我发现控件尺寸在不同屏幕上有所不同的问题:在高密度屏幕中控件太小而在低密度屏幕中则相当大。

我可以计算每个屏幕的比例因子(即使用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应用程序手动设置比例因子?

2 个答案:

答案 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的因子对我来说非常有效,其中对照实际上太大了。