簡體   English   中英

Qt Quick Controls 2 Scaling

[英]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支持,它使情況更好但仍有一些問題。 以下是應用High-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應用程序手動設置比例因子?

從Qt 5.6版開始,似乎可能有更好的解決方案來進行平台特定擴展。

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

我希望有所幫助。

我有同樣的問題,發現jpnurmi的答案最有幫助:添加

qputenv("QT_SCALE_FACTOR", "3"); 

在創建應用程序實例之前的main()中。 對於Retina顯示器來說,0.75的因子對我來說非常有效,其中控件實際上太大了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM