2016-03-01 11 views
19

Sto sviluppando su un monitor 4k e il suo un dolore ...Come ottenere un'interfaccia utente nitida ad alta risoluzione con Qt 5.6?

Finalmente sono riuscito a configurare QtDesigner e poi ecountered questo problema:

Quando si utilizza QT_AUTO_SCREEN_SCALE_FACTOR=1 e compilare un app con RadioButton e altre di base widget, sembra ridimensionato su uno schermo 4k. In caso contrario, le dimensioni dei controlli sono corrette e, come previsto, sono semplicemente non nitide, ma piuttosto pixelate.

Sono in esecuzione su Windows 10 Casa a 64 bit sullo schermo 4k con il 200% DPI zoom, utilizzando Qt 5.6 RC msvc2015 64bit e provato con il raggiungimento degli stessi risultati utilizzando

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 

dcreenshot

Se uso

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling); 

i controlli sono nitidi, la dimensione del testo è ok ma tutte le dimensioni sono molto più piccole.

Come si rendono i controlli nitidi sullo schermo DPI alto?

+1

Lo faccio sia con il foglio di stile per i widget: http://stackoverflow.com/questions/34407001/qt-and-high-dpi-screens/34408516#34408516 o utilizzo l'interfaccia utente QML. – AlexanderVX

+1

Ho letto la tua risposta prima, ma questo non mi sembra il supporto nativo ad alta risoluzione di cui tutti hanno parlato. Id si aspetta che questo sia automatico, perché i controlli sono pixelati e non resi in modo nitido? Se questo è il comportamento standard, come può essere raccomandato da tutte le fonti ufficiali? –

+0

Avendo una base di codice considerevolmente ampia, non abbiamo fretta di passare a Qt 5.6 e consideriamo 5.5 abbastanza stabile e in pratica hai appena scoperto quanto vantaggio si può ottenere in modalità AA_EnableHighDpiScaling. Se hai usato QML sarebbe molto diverso ma nitido. Attributo Rettangolo QML della scala mentale quindi. Un po 'più da leggere su https://doc-snapshots.qt.io/qt5-5.6/highdpi.html – AlexanderVX

risposta

0

Con QT_AUTO_SCREEN_SCALE_FACTOR, le dimensioni in punti dei caratteri non vengono modificate, ma vengono semplicemente ridimensionate rispetto ai pixel originali, quindi non saranno mai uniformi, ma solo più irregolari.

Rif: http://doc.qt.io/qt-5.6/highdpi.html#high-dpi-support-in-qt "Questo non cambierà la dimensione del punto di font di dimensioni"

È necessario utilizzare QT_SCALE_FACTOR invece per ridimensionare la vostra applicazione, non solo ridimensionare i suoi pixel.

0

Come documentazione Qt dice:

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. 

Si può provare a fare quello che sta facendo Qt Creator:

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

cosa Fondamentalmente importante è l'ultima linea QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);.

Problemi correlati