J'ai créé une application graphique en utilisant Qt. Mon application GUI contient des contrôles comme bouton poussoir et bouton radio. Lorsque j'exécute l'application, les boutons et les polices à l'intérieur du bouton semblent normaux. Lorsque je modifie la taille de mise à l'échelle DPI de l'affichage de 100% à 150% ou 200%, la taille de la police des contrôles est agrandie mais pas la taille du contrôle (bouton-poussoir, bouton radio) quelle que soit la résolution. Pour cette raison, le texte à l'intérieur des commandes a été coupé. veuillez voir l'image ci-jointe.
Application Qt lorsque la taille de mise à l'échelle DPI est définie sur 100%
Application Qt lorsque la taille de mise à l'échelle DPI est définie sur 200%
J'exécute également mon application sur certaines tablettes. Dans les tablettes, la valeur de l'échelle DPI doit être supérieure à 150%, sinon tout sera très petit.
J'ai cherché sur le Web pour créer une application d'interface utilisateur dans Qt indépendamment de la résolution et de la valeur d'échelle DPI, mais pas de chance. Je poste donc ma quête ici. Veuillez me faire savoir s'il existe un moyen de s'en débarrasser.
Le support High DPI est activé à partir de Qt 5.6.
La définition de QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling)
dans le code source de votre application permet une mise à l'échelle automatique à haute résolution.
AVIS: pour utiliser la méthode d'attribut, vous devez définir l'attribut avant de créer votre objet QApplication
:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
return app.exec();
}
L'utilisation correcte des mises en page peut vous aider.
http://qt-project.org/doc/qt-4.8/layout.html
Dire au système d'exploitation que vous gérez les modifications DPI empêchera les changements de police étranges auxquels vous ne vous attendiez pas.
http://msdn.Microsoft.com/en-us/library/ms701681 (v = vs.85) .aspx
Pour l'espacement des endroits critiques, vous pouvez vérifier la taille de votre police rendue, puis définir la taille minimale de votre objet en fonction de la taille résultante de votre texte.
http://qt-project.org/doc/qt-4.8/qfontmetrics.html#details
https://blog.qt.digia.com/blog/2009/06/26/improving-support-for-higher-dpi-on-Vista/
Vous pouvez essayer de vérifier avec d'autres mesures intégrées de Qt:
http://qt-project.org/doc/qt-4.8/qpaintdevice.html#widthMM
http://qt-project.org/doc/qt-4.8/qpaintdevice.html#logicalDpiX
Si vous utilisez QML, essayez des mises en page vierges avec uniquement un placement basé sur les ancres.
http://qt-project.org/doc/qt-4.8/qml-anchor-layout.html
QApplication
a des paramètres quelque peu liés.
http://qt-project.org/doc/qt-4.8/qapplication.html#setDesktopSettingsAware
Vous pouvez également spécifier manuellement la police.
http://qt-project.org/doc/qt-4.8/qapplication.html#setFont
J'espère que ça t'as aidé.
J'avais une fenêtre de taille fixe qui n'était pas assez grande pour contenir tout le texte qu'elle contenait lorsque les paramètres d'accessibilité de Windows étaient appliqués pour augmenter toutes les tailles de texte. Windows le fait via dpi augmente. J'ai corrigé cela en récupérant le facteur de mise à l'échelle du système d'exploitation, puis ajusté la taille de ma fenêtre et certaines de ses dispositions (que je n'ai pas pu mettre à l'échelle automatiquement pour une raison quelconque).
Voici comment j'ai obtenu l'échelle dpi (dans un fichier appelé "WindowsDpiScale.h"):
#ifndef WINDOWSDPISCALE_H
#define WINDOWSDPISCALE_H
#include <QtGlobal>
#ifdef Q_OS_WIN
#include <windows.h>
const float DEFAULT_DPI = 96.0;
float windowsDpiScale()
{
HDC screen = GetDC( 0 );
FLOAT dpiX = static_cast<FLOAT>( GetDeviceCaps( screen, LOGPIXELSX ) );
ReleaseDC( 0, screen );
return dpiX / DEFAULT_DPI;
}
#endif //Q_OS_WIN
#endif // WINDOWSDPISCALE_H
Et puis, comment je l'ai appliqué dans mon cas:
...
#include "WindowsDpiScale.h"
MainWindow::MainWindow( QWidget *parent )
: QMainWindow( parent )
{
...
// Enlarge the window and various child widgets to accomendate
// OS display scaling (i.e. accessibily options)
setScaleToOsSettings();
...
}
void MainWindow::setScaleToOsSettings()
{
#ifdef Q_OS_WIN
setScale( windowsDpiScale() );
#endif
}
void MainWindow::setScale( float scale )
{
// Resize the window
this->setFixedSize( (int)(scale * this->maximumWidth()),
(int)(scale * this->maximumHeight()) );
// Resize the layouts within the stacked widget
foreach( QVBoxLayout * layout,
windowUi_->pagerStackedWidget->findChildren<QVBoxLayout *>() )
layout->parentWidget()->setFixedSize(
(int)(scale * layout->parentWidget()->contentsRect().width()),
(int)(scale * layout->parentWidget()->contentsRect().height()) );
}