2009-09-23 13 views

Odpowiedz

17

Możesz pobrać domyślną czcionkę systemową za pomocą funkcji systemFont (..) QFontDatabase. Zostało to wprowadzone w Qt 5.2.

Przykład:

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

I przed Qt 5? – Momergil

+0

Właściwie to nie działało na Qt 5 na Linuksie, ale może to być spowodowane błędną konfiguracją fontconfig w naszej statycznej konstrukcji Qt, jednak "setStyleHint" 'metoda zadziałała. –

15

W przypadku wszystkich widżetów akceptujących tekst sformatowany można po prostu wstawić go do bloku pre, tj. <pre>This is my Text</pre>. Następnie użyje czcionki systemowej o stałej szerokości.

+0

Próbowałem to w moim programie i to działało, ale również dodać podział wiersza po tagu wstępnego. Nie wiedziałem, jak się tego pozbyć, więc zamiast tego spróbowałem text i to działało! Nie sprawdziłem jednak, czy moje rozwiązanie jest przenośne. – mjwach

1

Używam Courier w Qt na obu systemach Linux i Windows.

41

Można użyć właściwości style hint z QFont:

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

Jeśli nie można znaleźć czcionka (co zdarza się przy stałej szerokości w systemie Windows), Qt font matching algorithm próbuje znaleźć czcionkę, która odpowiada podanej wskazówkę stylu.

+3

Z ciekawości: dlaczego nie 'QFont :: Monospace'? – kralyk

+4

Pomocny dodatek: ten kod działa tylko wtedy, gdy przekazujesz nazwę rodziny do konstruktora QFont. W przeciwnym razie użyje domyślnej rodziny czcionek, która będzie miała zmienną szerokość, co spowoduje przesłonięcie wskazówki dotyczącej stylu. Musiałem to zrobić, 'QFont font (" ");', kiedy nie miałem konkretnej czcionki o stałej szerokości na żądanie. – Harvey

+0

@kralyk Ciekawi mnie też, i próbowałem na Windowsie i zauważyłem, że 'QFont :: Monospace' nie będzie skutkować czcionką o stałej szerokości, natomiast' TypeWriter' będzie. Naprawdę nie mogę wytłumaczyć dlaczego :( – AkiRoss

Powiązane problemy