64 votes

Comment spécifier des polices mono-espace pour les applications Qt multiplateformes?

Existe-t-il un moyen indépendant de la plate-forme pour spécifier une police à largeur fixe pour un widget Qt ?

Si je définis la police sur "Monospace" dans Designer sur Linux, elle n'est pas trouvée sur Windows et Arial est utilisé à la place.

55voto

Torsten Marek Points 27554

Vous pouvez utiliser la propriété style hint de QFont:

QFont font("Monospace");
font.setStyleHint(QFont::TypeWriter);

Si la police ne peut pas être trouvée (ce qui arrive avec Monospace sur Windows), l'algorithme de correspondance des polices de Qt essaie de trouver une police qui correspond à la suggestion de style donnée.

3 votes

Par curiosité : pourquoi ne pas utiliser QFont::Monospace ?

7 votes

Un addendum utile: ce code ne fonctionne que si vous passez un nom de famille au constructeur QFont. Sinon, il utilisera la famille de polices par défaut, qui sera une largeur variable, ce qui annule ensuite l'indication de style. J'ai dû faire cela, QFont font("");, lorsque je n'avais pas de police à espacement fixe spécifique à demander.

0 votes

@kralyk J'étais curieux aussi, et j'ai essayé sur Windows et j'ai remarqué que QFont::Monospace ne donnera pas une police de caractères à espacement fixe, tandis que TypeWriter le fera. Je ne peux vraiment pas expliquer pourquoi, cependant :(

48voto

f15h Points 666

Vous pouvez récupérer la police à largeur fixe par défaut du système en utilisant la fonction systemFont(..) de QFontDatabase. Elle a été introduite dans Qt 5.2.

Exemple:

const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont)

1 votes

En fait, cela n'a pas fonctionné sur Qt 5 sur Linux, mais cela pourrait être dû à une mauvaise configuration de fontconfig dans notre version statique de Qt ; cependant, la méthode setStyleHint a fonctionné.

0 votes

@MatteoItalia Quel Linux? Ça n'a pas non plus fonctionné pour moi sur KDE Neon 16.04.

0 votes

@Silicomancer : eeh qui sait ; c'était sûrement une certaine version de KDE, soit celle de Kubuntu 16.04 ou 14.04.

19voto

bluebrother Points 4224

Pour tous les widgets qui acceptent le Rich Text, vous pouvez simplement le mettre dans un bloc pre, c'est-à-dire

Ceci est mon texte

. Il utilisera alors la police monospace du système.

3 votes

J'ai essayé cela dans mon programme et ça a marché, mais ça a aussi ajouté un saut de ligne après la balise pre. Je ne savais pas comment m'en débarrasser alors j'ai essayé text à la place et ça a marché! Je n'ai pas vérifié, cependant, si ma solution est portable.

7voto

J'utilise Courier dans Qt à la fois sur Linux et Windows.

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