我正在開發應該在移動和桌面平臺上運行的應用程序。我發現控制器的大小在不同的屏幕上會有所不同:在高密度屏幕中,控件太小,而在低密度屏幕中則相當大。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