2017-08-25 7 views
1

Lorsque j'utilise any method pour sélectionner l'un des non par défaut (ou base) styles Qt Quick Controls 2 application (c.-à-Universal ou Matériel), puis tous les contrôles avec le texte (comme Label, TextField, dont la taille de la police doit dépendre de QGuiApplication::font) utilise la valeur de la taille de la police, qui a QCoreApplication avant de changer:Taille de la police lors de l'utilisation de style non défini par défaut dans Qt Quick Controls 2

QFont font = application.font(); 
bool ok = false; 
font.setPointSize(QSettings{}.value("fontSize", 17).toInt(&ok)); 
Q_ASSERT(std::exchange(ok, false)); 
application.setFont(font); 

Seuls Text, TextField sont redimensionnés correctement, mais ils ne sont d'aucune utilité dans mon interface graphique.

Lorsque je colle Par défaut style, tous les éléments mentionnés sont redimensionnés correctement.

Comment faire pour que tous les éléments soient redimensionnés en fonction des styles globaux font.pointSize, autres que Par défaut?

Une autre question connexe est de savoir comment obtenir la bonne couleur (signifie «contraste» et conforme au style) pour, disons, le texte et l'arrière-plan surlignés pour le thème de style courant utilisé? L'utilisation de SystemPalette { id: palette }ApplicationWindow chez les enfants donne des couleurs appropriées seulement pour le style par défaut (disons palette.highlightedText est "white", palette.highlight est "blue" ou "darkblue" (pas sûr)). Il semble moche dans les thèmes de style, diffère de Par défaut.

Une autre observation importante est: si je mets font.pointSize: 17 (ou tout aussi font: Qt.application.font) dans la racine ApplicationWindow, tous les éléments sont redimensionnés correctement, à l'exception de ceux d'entre eux qui ont nouveau contexte: dire, highlight: et delegate: s en *View s, sourceComponent: s en Loader s, propriété par défaut de Component et Repeater et autres, où l'héritage de la police se brise en raison de la perte du contexte parent Item.

Il semble que je devrais "hériter" manuellement ApplicationWindow.window.font pour chaque nouveau contexte. C'est triste si c'est le cas. C'est ennuyeux, si par ex. en Repeater J'utilise RowLayout avec beaucoup de Label s: dans chacun de Label je dois ajouter font: ApplicationWindow.window.font.

+0

essayer BTW un des thèmes de style différents donne l'occasion de trouver toutes les mauvaises décisions de conception. C'est comme un tamis pour son GUI d'énumérer tous les styles possibles avec une gamme raisonnable de 'font.pointSize's. – Orient

Répondre

0

Orient, je sais qu'il est trop tard, mais on peut également définir la taille de police dans QApplication comme ceci:

QFont font = QApplication::font(); 
font.setPointSizeF(fontSize); 
QApplication::setFont(font); 
+0

C'est un non-sens. * L'application QML * n'a pas besoin de 'QApplication', juste' QGuiApplication'. Il y a [même un avertissement] (http://doc.qt.io/qt-5/qapplication.html#setFont) pour ne pas faire comme vous l'avez mentionné. – Orient