モバイルおよびデスクトップ プラットフォームで実行するアプリケーションを開発しています。コントロールのサイズが画面によって異なることがわかった問題: 高密度画面ではコントロールが小さすぎ、低密度画面ではかなり大きくなります。
各画面の倍率を計算し (つまり、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'!)
一部の高 DPI ディスプレイ (Samsung タブレットおよび Xiaomi Phone) では状況が改善されているようです。高 DPI サポートを適用すると、両方のデバイスの DPI が 160 近くになります。
ただし、Retina ディスプレイと低密度ディスプレイの DPI は変化せず、画面上のアイテムは本来よりも大きく見えます。したがって、元の問題の半分しか解決しません。実行時にすべての Qt アプリケーションの倍率を手動で設定する方法を誰かが知っているのではないでしょうか?