3

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

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

4

2 回答 2

2

似乎从 Qt 5.6 版开始,可能有更好的平台独立缩放解决方案。

Qt Quick Controls 2 中的高 DPI 支持https://doc.qt.io/qt-5/qtquickcontrols2-highdpi.html

我希望这会有所帮助。

于 2017-02-08T15:21:31.830 回答
1

我遇到了同样的问题,发现jpnurmi的答案最有帮助:添加

qputenv("QT_SCALE_FACTOR", "3"); 

在 main() 创建应用程序实例之前。对于 Retina 显示器,0.75 的系数对我来说效果很好,因为控件实际上太大了。

于 2017-05-13T09:58:05.377 回答