2014-06-23 11 views
15

Piszę aplikację Qt, która musi działać w systemie Windows o wysokiej rozdzielczości (192dpi zamiast 96dpi).Automatyczne przeskalowanie aplikacji na platformie Windows o wysokiej rozdzielczości?

Niestety framework Qt nie obsługuje jeszcze wysokiej rozdzielczości (przynajmniej w systemie Windows), więc moja aplikacja i wszystkie jej elementy mają połowę rozmiaru, który powinien.

Czy istnieje sposób wymuszenia/symulacji automatycznego skalowania takich aplikacji przez system Windows?

Odpowiedz

6

Aplikacje korzystające ze stałych współrzędnych i rozmiarów będą miały mały rozmiar w rozdzielczościach o wysokiej rozdzielczości. Chociaż nawet przy korzystaniu z układów istnieją pewne problemy dotyczące rozmiarów i marginesów elementów i czcionek. Na szczęście istnieje wsparcie dla wyświetlaczy o wysokiej rozdzielczości od Qt 5.4, ponieważ istnieje wiele high-DPI issue fixes.

Aplikacja Windows może przyjmować jedną z następujących poziomów świadomości "DPI" (z dokumentacją Qt):

  • DPI Nieświadomy: Poziom ten został wprowadzony w Windows-Vista. Windows będzie udawał aplikację, że działa na standardowym wyświetlaczu o rozdzielczości 96 DPI 1920 x 1080 i odpowiednio skaluje aplikację . Jest przeznaczony do starszych aplikacji zaprojektowanych dla wyświetlaczy o niskiej czułości ( ). Niektóre artefakty mogą wynikać z tego typu skalowania.
  • System-DPI Aware: Ten poziom został wprowadzony w systemie Windows Vista. Różni się od Per-Monitor DPI Aware tylko wtedy, gdy podłączonych jest wiele monitorów . Windows obliczy skalowanie odpowiednie dla wszystkich podłączonych monitorów .
  • Uwierzytelnianie DPI dla monitora: ten poziom został wprowadzony w systemie Windows 8.1. System Windows nie wykonuje żadnego skalowania.

również stwierdza, że:

aplikacji Qt domyślnie są Per-Monitor DPI Aware na Windows 8.1 lub System-DPI Aware na starszych wersjach systemu Windows. Jak Qt 5.4, poziom może być określony przez przekazanie parametru do wtyczki platformy (patrz Korzystanie qt.conf):

<application> -platform windows:dpiawareness=0,1,2 

Możesz przeczytać więcej informacji here.

W ogóle mieć dobry interfejs użytkownika na wysokiej DPI wyświetlaczy, należy rozważyć następujące kwestie:

  • Użyj najnowszej wersji Qt
  • Wpisz układy i uniknąć stałych rozmiarach (o ile można obliczyć skalowania wskaźników na własną własne)
  • Wprowadź odpowiednie ustawienia dotyczące DPI w zależności od potrzeb aplikacji, na przykład ustaw atrybut Qt::AA_UseHighDpiPixmaps, jeśli pracujesz z QPainter i pixmaps, lub obliczyć współczynnik skalowania w celu dostosowania niektórych rozmiarów elementów w specjalnych sytuacjach.
6

Qt w pełni obsługuje monitory wysokiej rozdzielczości od Qt 5.6 dalej, za pomocą atrybutu lub zmiennej środowiskowej (z wyjątkiem OS X, gdzie obsługa jest natywna). Dla metody atrybutu, zastosowanie:

#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support 

    QApplication app(argc, argv); 
    return app.exec(); 
} 

lub ustawić zmienną środowiskową System:

QT_AUTO_SCREEN_SCALE_FACTOR=1 

Przetestowałem obie metody na Windows 10 z wysokim DPI monitora surfacebook a wyniki są odpowiednio skalowane zgodnie z oczekiwaniami.

0

Używam Qt 4.8. Najpierw powinieneś użyć układów. Moim celem było uniemożliwienie użytkownikowi zmiany rozmiaru okien dialogowych, formularzy itp.

osiągnąłem poprawnych wyników wyświetlanych na innym DPI przez umieścić ten kod w konstruktorze dialogowym:

adjustSize(); 
setFixedSize(size()); 

Pierwsza linia adjustSize() dostosować rozmiar okna, aby dopasować jego zawartość. Druga linia setFixedSize(size()) ustala rozmiar okna dialogowego po dostosowaniu jego rozmiaru do zawartości i uniemożliwia użytkownikom zmianę jego rozmiaru. Nie musisz ustawiać polityki wielkości.

Powiązane problemy