web-dev-qa-db-fra.com

Comment obtenir une interface utilisateur nette avec une résolution élevée avec Qt 5.6?

Je développe sur un moniteur 4k et c'est une douleur ...

Enfin, j'ai réussi à configurer QtDesigner et à résoudre ce problème:

Lorsque vous utilisez QT_AUTO_SCREEN_SCALE_FACTOR=1 et que vous compilez une application avec radiobutton et d'autres widgets de base, celle-ci est redimensionnée sur un écran 4k. Sinon, les dimensions des contrôles sont correctes et comme prévu, elles ne sont tout simplement pas nettes, mais pixellisées.

Je suis sous Windows 10 Home 64bit sur un écran 4K avec un zoom de 200% DPI, avec Qt 5.6 RC msvc2015 64bit et avec le même résultat en utilisant

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

 dcreenshot

Si j'utilise

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);

les contrôles sont nets, la taille du texte est ok MAIS toutes les dimensions sont beaucoup plus petites.

Comment rendre les contrôles nets sur un écran avec une résolution élevée?

19
michnovka

Comme le dit la documentation 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.

Vous pouvez essayer de faire ce que Qt Creator fait:

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);
}

Ce qui est fondamentalement important, c’est la dernière ligne QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);.

3
Ribtoks

Avec QT_AUTO_SCREEN_SCALE_FACTOR, la taille en points des polices n'est pas modifiée, elles sont simplement redimensionnées à partir de leurs pixels d'origine. Elles ne seront donc jamais lisses, mais plus irrégulières.

Réf: http://doc.qt.io/qt-5.6/highdpi.html#high-dpi-support-in-qt "Cela ne changera pas la taille des polices de taille ponctuelle"

Vous devez utiliser QT_SCALE_FACTOR à la place pour redimensionner votre application, pas seulement pour redimensionner ses pixels.

1
G Huxley