2016-03-05 21 views
5

Sto scrivendo una semplice applicazione Qt (Widgets) Gui per Windows 10. Sto usando la versione beta 5.6.0 di Qt.ridimensionamento improprio dell'applicazione Qt Desktop in Windows 10

Il problema che sto avendo è che non sia scalando diritto alla schermata del mio surfacebook affatto:

enter image description here

E 'un po' difficile da dire perché ridimensiona così l'immagine, a meno di notare quanto sono piccoli i controlli della barra del titolo del widget del dock relativi ai controlli della barra del titolo della finestra.

This link da Qt parla di ridimensionamento, ma è in gran parte si concentra su QML/QtQuick e le applicazioni mobili in generale, e in aggiunta sembra implicare che in un'applicazione QtWidgets del desktop, QPainter determinerà automaticamente la scala adeguata, che chiaramente non è .

Qual è il modo migliore per garantire che le applicazioni Qt desktop e non qml vengano ridimensionate in modo appropriato su monitor con DPI elevato, in particolare con Windows 10?

risposta

7

Qt ha pubblicato di recente un post sul blog su questo numero here.

Il supporto DPI alto è abilitato da Qt 5.6 in poi. Su piattaforme OS X, esiste un supporto nativo per DPI alto. Su X11/Windows/Android, ci sono due metodi per consentire ad alta DPI di rilevamento per il post sul blog:

  1. Impostare una variabile d'ambiente
  2. Impostazione di un attributo nel codice sorgente del programma

Impostazione QT_AUTO_SCREEN_SCALE_FACTOR=1 nel tuo ambiente di sistema le variabili risolveranno il problema del ridimensionamento.

Inoltre, l'impostazione di QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); nel codice sorgente dell'applicazione dovrebbe consentire anche il ridimensionamento automatico ad alto DPI.

AVVISO: Per utilizzare il metodo di attributo, è must impostare l'attributo prima di creare l'oggetto QApplication, vale a dire:

#include <QApplication> 

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

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