web-dev-qa-db-ja.com

Qt 5.6で高dpiでシャープなUIを取得する方法

私は4kモニターで開発していますが、その苦痛は...

最後に、なんとかQtDesignerをセットアップして、この問題に遭遇しました。

QT_AUTO_SCREEN_SCALE_FACTOR=1を使用し、ラジオボタンやその他の基本的なウィジェットを使用してアプリをコンパイルすると、4k画面に拡大されて表示されます。それ以外の場合、コントロールの寸法は正しく、予想どおり、シャープではなくピクセル化されています。

Qt 5.6 RC msvc2015 64ビットを使用して、200%DPIズームの4k画面のWindows 10 Home 64ビットで実行していて、同じ結果を達成しようとしました

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

dcreenshot

私が使うなら

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);

コントロールはシャープで、テキストサイズは問題ありませんが、すべての寸法がはるかに小さくなっています。

高DPI画面でコントロールをシャープにするにはどうすればよいですか?

21
michnovka

Qtドキュメントが言うように:

_Use QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.
QT_SCREEN_SCALE_FACTORS to set per-screen factors.
QT_SCALE_FACTOR to set the application global scale factor.
_

Qt Creatorの機能を試すことができます。

_static const char ENV_VAR_QT_DEVICE_PIXEL_RATIO[] = "QT_DEVICE_PIXEL_RATIO";
if (!qEnvironmentVariableIsSet(ENV_VAR_QT_DEVICE_PIXEL_RATIO)
        && !qEnvironmentVariableIsSet("QT_AUTO_SCREEN_SCALE_FACTOR")
        && !qEnvironmentVariableIsSet("QT_SCALE_FACTOR")
        && !qEnvironmentVariableIsSet("QT_SCREEN_SCALE_FACTORS")) {
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
}
_

基本的に重要なのは、最終行のQCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);です。

4
Ribtoks

QT_AUTO_SCREEN_SCALE_FACTORを使用すると、フォントのポイントサイズは変更されず、元のピクセルから拡大されるだけなので、スムーズになることはなく、凹凸が大きくなります。

参照: http://doc.qt.io/qt-5.6/highdpi.html#high-dpi-support-in-qt "ポイントサイズのフォントのサイズは変更されません"

ピクセルを再スケーリングするだけでなく、アプリを再スケーリングするには、代わりにQT_SCALE_FACTORを使用する必要があります。

1
G Huxley

これが私のために働いていたものです。 QApplicationのインスタンス化でコマンドラインオプションを指定することにより、DPIAwarenessを手動で設定できます。

公式ドキュメントはこちら https://doc.qt.io/qt-5/highdpi.html (セクションDPI認識)。

ドキュメントによると、アプリケーションをDPI非対応(したがって、自動的に拡大縮小されますが、表示がぼやける)、またはシステムDPI対応またはモニターごとに設定できます。

以下は、QApplicationをインスタンス化して高DPIを強制するための最小限のコード例です。1以外の値(0または2)を選択して、DPIUnawareまたはモニターごとのDPIを有効にします。

int main() 
{
   int argc = 3;
   char*argv[] = {(char*)"Appname", (char*)"--platform", (char*)"windows:dpiawareness=1";
   (void) new QApplication(argc, argv);
}
0
Pat. ANDRIA