2014-06-23 2 views
15

높은 dpi Windows (96dpi 대신 192dpi)에서 실행해야하는 Qt 응용 프로그램을 작성하고 있습니다.높은 dpi Windows 플랫폼에서 응용 프로그램 자동 재 조정?

불행히도 Qt 프레임 워크는 (적어도 Windows에서는) 높은 dpi를 지원하지 않으므로 내 응용 프로그램과 모든 요소는 필요한 크기의 절반으로 보입니다.

Windows에서 이러한 앱을 자동으로 업 스케일링하도록 강제/시뮬레이션 할 수있는 방법이 있습니까?

답변

6

고정 된 좌표 및 크기를 사용하는 응용 프로그램은 높은 DPI 해상도에서 작게 보입니다. 레이아웃을 사용하더라도 요소 및 글꼴 크기 및 여백과 관련된 몇 가지 문제가 있습니다. 다행히도 Qt 5.4 이후로 높은 DPI 디스플레이에 대한 지원이 있습니다. high-DPI issue fixes이 많았습니다.

Windows에서 응용 프로그램은 (Qt의 문서에서) "DPI 인식"의 다음 단계 중 하나를 가정 할 수 있습니다 :

  • DPI 알지도 못하는 :이 수준이 Windows 비스타에 도입되었다. Windows는 실행중인 응용 프로그램에 표준 디스플레이 (96 DPI 1920x1080)로 가장하고 응용 프로그램을 크기에 맞게 조정합니다. 낮은 DPI 디스플레이를 위해 으로 설계된 구형 응용 프로그램을 수용하기위한 것입니다. 이러한 유형의 스케일링으로 인해 일부 아티팩트가 발생할 수 있습니다.
  • System-DPI Aware :이 수준은 Windows-Vista에서 도입되었습니다. 여러 모니터가 연결된 경우에만 Per-Monitor DPI 인식과 다릅니다. Windows는 연결된 모든 모니터에 적합한 크기 조정을 계산합니다.
  • 모니터 별 DPI 인식 :이 수준은 Windows 8.1에서 도입되었습니다. Windows는 스케일링을 전혀 수행하지 않습니다. 기본적으로

    Qt는 응용 프로그램이 별 모니터 윈도우 8.1 시스템 - DPI 이전 버전의 Windows에 대한 인식에 대한 인식 DPI :

은 또한 그것은 상태. Qt는 5.4로, 레벨 은 (qt.conf 사용 참조) 플랫폼 플러그인에 매개 변수를 전달하여 지정할 수 있습니다

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

당신은 자세한 내용은 here를 읽을 수 있습니다. 일반적으로

고려, 높은 DPI 디스플레이에 좋은 UI를 가지고있는 다음과 같은 : 당신이 확장 비율을 계산하지 않는

  • 은 (Qt는의
  • 를 사용하여 레이아웃을 최신 버전을 사용하여 고정 된 크기를 방지하여 자신의)
  • QPainter 및 pixmaps로 작업하는 경우 특성을 설정하거나 특별한 상황에서 특정 요소 크기를 조정하는 비율을 계산하는 것과 같이 응용 프로그램 요구에 따라 적절한 DPI 관련 설정을 지정하십시오.
6

Qt는 Qt 5의 높은 DPI 모니터를 완벽하게 지원합니다.속성 또는 환경 변수를 통해 6 이후 (OS X에서 지원이 기본 인 경우 제외). 속성 방법, 사용 :

#include <QApplication> 

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

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

또는 시스템 환경 변수 설정 : 나는 높은 DPI surfacebook 모니터 창 (10)에 대한 두 가지 방법을 테스트 한 결과가 적절하게 조정됩니다

QT_AUTO_SCREEN_SCALE_FACTOR=1 

을 예상대로

0

Qt 4.8을 사용하고 있습니다. 첫째, 레이아웃을 사용해야합니다. 내 목표는 사용자가 대화 상자, 양식 등의 크기를 조절하는 것을 막는 것이 었습니다.

adjustSize(); 
setFixedSize(size()); 

이 첫 번째 줄 adjustSize() 그 내용에 맞게 대화 상자의 크기를 조정 :

나는 냈습니다 대화 생성자에서이 코드를 다른 DPI에 대한 정확한 표시 결과를 달성했다. 두 번째 줄 setFixedSize(size())은 크기를 내용으로 조정 한 후 대화 상자의 크기를 수정하고 사용자가 크기를 조정하지 못하도록합니다. 크기 정책을 설정하지 않아도됩니다.

관련 문제