5 votes

Tailles de police relatives dans QT ou la manière la plus portable de les définir

Après avoir travaillé dans le domaine du développement Web, je me consacre maintenant au développement d'applications QT.

En travaillant avec QFonts, j'ai constaté que je n'ai apparemment que deux options pour définir la taille des polices dans QT : soit par taille de pixel, soit par taille de point.

Lorsque je réalise des mises en page pour le web, j'ai l'habitude de définir toutes mes polices de manière relative... à l'aide de em qui font référence à la taille de la police héritée, où 1em est égal à la taille de la police de l'élément conteneur, 0,5em 50% la taille de la police, 1,5em 50% plus grand, et ainsi de suite.

Je m'inquiète de la portabilité et de l'identité des dispositifs/OS de mes applications. Existe-t-il une meilleure façon de définir ces polices ou dois-je plutôt m'en tenir à l'une de ces méthodes ? Si possible, puis-je hériter de font-sizes et définir les tailles en unités relatives telles que ems ou des pourcentages ?

8voto

Clare Macrae Points 2384

Selon la façon dont vous concevez votre application, je crains qu'en plus de vous préoccuper de la taille de la police, vous deviez également faire très attention aux points suivants polices spécifiques à la plate-forme .

Par exemple, je viens de lancer Qt Designer, dans Qt Creator 2.3.0 (basé sur Qt 4.7.4) - donc à peu près le dernier code stable, et j'ai fait ce qui suit :

  • Création d'un nouveau formulaire Qt Designer (i.e. un fichier .ui)
  • En faire un Widget vide
  • Ajout d'un QTextEdit (appelé "Text Edit" dans la section "Input Widgets" du Designer)
  • Double-cliquez sur le QTextEdit, pour ouvrir ses propriétés.
  • Vue de sa source

C'est ce que je vois :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;">
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>

Notez l'utilisation d'une police spécifique à Windows, et d'une taille codée en dur, avant même que je n'aie apporté la moindre modification au contenu : font-family:'MS Shell Dlg 2'; font-size:7.8pt;

J'ai déjà signalé ce problème au support utilisateur de Qt, et il m'a été répondu (via le statut du bogue) qu'il n'y a aucun plan pour le corriger. (Voir Edit ci-dessous, pour des informations sur ces bogues)

Ainsi, au travail, à chaque version, nous devons rechercher dans tous nos fichiers .ui, pour nous assurer qu'aucune information sur les polices spécifiques à une plate-forme ne s'est glissée dans un fichier .ui depuis la version précédente.

(Il y a un an ou deux, j'ai lancé Designer sur Mac, Windows et Linux, et j'ai montré que chaque version générait des informations sur les polices spécifiques à la plate-forme, comme celle-ci, et des tailles de police par défaut très différentes. Chacune d'entre elles ne s'affichait pas correctement sur les deux autres plateformes ! Le texte Mac était beaucoup trop grand sur les deux autres, et les deux autres étaient beaucoup trop petits sur le Mac).

J'aime beaucoup Qt, mais je trouve ce manque d'indépendance vis-à-vis de la plate-forme dans quelque chose d'aussi basique que son concepteur d'interface utilisateur plutôt frustrant.

Edit - info sur le bug de TrollTech, juillet 2009

J'ai trouvé l'info de quand j'ai signalé '.ui cross-platform problems - portability of fonts and sizes'. Je ne sais pas comment ces anciens numéros de référence, provenant de TrollTech en juillet 2009, se traduisent dans le suivi actuel des problèmes de Qt : J'espère que quelqu'un d'autre pourra mettre à jour les liens vers ceux qui fonctionnent actuellement :

1voto

Ale Points 240

Ce n'est pas possible actuellement. À mon avis, le moyen le plus portable serait d'utiliser des pts, car ils sont moins dépendants des appareils que les px.

0voto

Gennady Points 1

Dans qt3, le code suivant fonctionne au moins pour les polices fixes :

QFont f=font();
int psz=f.pixelSize();
if (psz>0) f.setPixelSize(psz*6/5);
else f.setPointSizeFloat(f.pointSizeFloat()*1.2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X