[英]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.