2014-06-23 20 views
15

Sto scrivendo un'applicazione Qt che deve essere eseguita su Windows ad alta risoluzione (192 dpi anziché 96 dpi).Riscalare automaticamente un'applicazione su una piattaforma Windows ad alta risoluzione?

Sfortunatamente il framework Qt non ha ancora il supporto per l'alta risoluzione (almeno su Windows), quindi la mia applicazione e tutti i suoi elementi sembrano la metà delle dimensioni che dovrebbero.

C'è un modo per forzare/simulare l'upscaling automatico di tali app da Windows?

risposta

6

Le applicazioni che utilizzano coordinate e dimensioni fisse appariranno piccole su risoluzioni DPI elevate. Sebbene anche utilizzando i layout ci siano alcuni problemi relativi alle dimensioni e ai margini di elementi e font. Fortunatamente esiste il supporto per i display ad alta DPI da Qt 5.4 in quanto vi sono stati molti high-DPI issue fixes.

Un'applicazione su Windows può assumere uno dei seguenti livelli di "DPI Awareness" (Dalla documentazione Qt):

  • DPI Ignaro: Questo livello è stato introdotto in Windows-Vista. Windows farà finta all'applicazione che è in esecuzione su un display standard di 96 DPI di 1920x1080 e ridimensiona l'applicazione di conseguenza. È progettato per ospitare applicazioni precedenti progettate per schermi a bassa risoluzione. Alcuni artefatti possono derivare da questo tipo di ridimensionamento .
  • Sistema-DPI consapevole: questo livello è stato introdotto in Windows-Vista. Si differenzia da DPI-Per-Monitor Aware solo quando più monitor sono connessi a . Windows calcolerà un ridimensionamento adatto per tutti i monitor collegati .
  • DPI per-monitor consapevole: questo livello è stato introdotto in Windows 8.1. Windows non esegue alcun ridimensionamento.

Inoltre afferma che:

applicazioni Qt per impostazione predefinita sono Per-Monitor DPI Aware su Windows 8.1 o sistema-DPI Aware su versioni precedenti di Windows. Come di Qt 5.4, il livello può essere specificato passando un parametro al plugin piattaforma (vedi Utilizzando qt.conf):

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

Si può leggere ulteriori informazioni here.

In generale per avere una buona interfaccia utente su high-DPI display, considerare quanto segue:

  • utilizzare l'ultima versione di Qt
  • utilizzare layout ed evitare misure fisse (a meno che non si calcolano i rapporti di scala sul tuo proprio)
  • Definire le impostazioni DPI appropriate in base alle esigenze dell'applicazione, ad esempio impostare l'attributo Qt::AA_UseHighDpiPixmaps se si lavora con QPainter e pixmap o calcolare un rapporto di ridimensionamento per la regolazione di determinate dimensioni di elemento in situazioni speciali.
6

Qt supporta pienamente i monitor DPI alti da Qt 5.6 in poi, tramite attributo o variabile di ambiente (eccetto su OS X dove il supporto è nativo). Per il metodo attributo, uso:

#include <QApplication> 

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

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

o impostare la variabile di ambiente di sistema:

QT_AUTO_SCREEN_SCALE_FACTOR=1 

Ho provato entrambi i metodi su Windows 10 con un alto DPI monitorare surfacebook ed i risultati sono scalati correttamente come previsto.

0

Sto usando Qt 4.8. Innanzitutto, dovresti usare i layout. Il mio obiettivo era quello di impedire all'utente di ridimensionare dialoghi, moduli, ecc.

ho raggiunto risultati di visualizzazione corretti su diversi DPI da inserire questo codice nel costruttore di dialogo:

adjustSize(); 
setFixedSize(size()); 

Prima linea adjustSize() regolare le dimensioni della finestra di dialogo per adattare il suo contenuto. Seconda riga setFixedSize(size()) corregge le dimensioni della finestra di dialogo dopo aver regolato la sua dimensione sul contenuto e impedito agli utenti di ridimensionarla. Non devi impostare criteri per le dimensioni.

Problemi correlati