Modification de la taille de mise à l'échelle du DPI de l'affichage de la taille de police de L'application Qt obtenir rendu plus grand
j'ai créé une application GUI en utilisant Qt. Mon application GUI contient des commandes comme bouton-poussoir et bouton-radio. Quand j'exécute l'application, les boutons et les polices de caractères à l'intérieur du bouton semble normal. Lorsque je change la taille de mise à l'échelle DPI de l'affichage de 100% à 150% ou 200%, la taille de police des contrôles rendus plus grand mais pas la taille de contrôle (bouton-poussoir, bouton radio) quelle que soit la résolution. Pour cette raison, le texte à l'intérieur de contrôles ont été coupées. veuillez voir l'image jointe.
Qt application Regarder lorsque la taille de mise à l'échelle DPI est fixée à 100%
application Qt regarder quand DPI taille fixée à 200%
j'exécute mon application dans quelques comprimés aussi. Dans les tablettes, la valeur de L'échelle DPI doit être plus de 150% sinon tout sera affiché très petit.
j'ai cherché dans le web pour créer une application D'interface utilisateur dans Qt sans tenir compte de la résolution et de la valeur D'échelle de DPI, mais pas de chance. Donc je suis poster mes quêtes ici. Dites-moi s'il y a un moyen de s'en débarrasser.
3 réponses
le support DPI élevé est activé à partir de Qt 5.6.
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling)
dans votre application, le code source permet une mise à l'échelle automatique en DPI élevé.
REMARQUE: Pour utiliser la méthode attribut, vous devez définir l'attribut avant de créer votre QApplication
objet:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
return app.exec();
}
utiliser correctement les layouts peut aider.
http://qt-project.org/doc/qt-4.8/layout.html
dire au système D'exploitation que vous gérez les changements de DPI empêchera les changements de police bizarres auxquels vous ne vous attendiez pas.
http://msdn.microsoft.com/en-us/library/ms701681 (v=vs 85).aspx
pour espacer les endroits critiques, vous pouvez vérifier la taille de votre police rendue, puis définir la taille minimale de votre objet en fonction du résultat la taille 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 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 d'obtenir des mises en page vierges du seul placement basé sur l'ancrage.
http://qt-project.org/doc/qt-4.8/qml-anchor-layout.html
QApplication
a certains paramètres qui sont un peu concerner.
http://qt-project.org/doc/qt-4.8/qapplication.html#setDesktopSettingsAware
Vous pouvez aussi spécifier manuellement la police.
http://qt-project.org/doc/qt-4.8/qapplication.html#setFont
J'espère que ça aidera.
j'avais une fenêtre de taille fixe qui n'était pas assez grande pour correspondre à tout le texte qu'elle contenait lorsque les paramètres d'accessibilité de Windows ont été appliqués pour augmenter toutes les tailles de texte. Windows le fait via les augmentations de dpi. J'ai corrigé cela en retirant le facteur d'échelle de l'os et j'ai ensuite ajusté la taille de ma fenêtre et certaines de ses mises en page (que je ne pouvais pas mettre à l'échelle automatiquement pour une raison quelconque).
Voici comment j'ai obtenu l'échelle de 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
...
#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()) );
}