2016-05-26 4 views
3

Ich habe ein QtQuick/QML 5.6 Projekt, wo ich 45 .ttf Dateien laden muss, die Gewichtsvariationen von verschiedenen (verwandten) Schriftfamilien darstellen.Laden Sie viele Schriftartenvariationen in QML

Zum Beispiel, hier ist eine Teilmenge der Schriftdateien (drei Gewichte für zwei Familien):

  • EncodeSans-Thin.ttf
  • EncodeSans-Regular.ttf
  • EncodeSans-Bold.ttf
  • EncodeSansNarrow-Thin.ttf
  • EncodeSansNarrow-Regular.ttf
  • EncodeSansNarrow-Bold.ttf

ich alle 45 .ttf Dateien in ein .qrc in meinem Projekt hinzugefügt habe, aber wenn ich versuche, die Schriftfamilie zu verwenden, funktioniert es nicht:

Text { text:"So Thin"; font.family:"Encode Sans"; font.weight:Font.Thin } 
Text { text:"Fatty"; font.family:"Encode Sans"; font.weight:Font.Bold } 

Wenn ich eine einzige Schriftart hinzufügen Lader für eine Schriftart in jeder Familie, aber es funktioniert, für alle Gewichts Variationen dieser Schrift

FontLoader { source:"qrc:/fonts/EncodeSans-Regular.ttf" } 
FontLoader { source:"qrc:/fonts/EncodeSansNarrow-Regular.ttf" } 
Text { text:"So Thin"; font.family:"Encode Sans"; font.weight:Font.Thin } 
Text { text:"Fatty"; font.family:"Encode Sans"; font.weight:Font.Bold } 

ich davon überrascht bin. Es scheint auf jeden Fall EncodeSans-Thin.ttf für das dünne Gewicht und EncodeSans-Bold.ttf für das kühne Gewicht zu verwenden, obwohl diese Dateien in keiner FontLoader erwähnt.

Edit: der obige Code funktioniert nicht. Aufgrund eines separaten Fehlers weiß ich jetzt, dass Font.Thin nie funktionierte (es wurde das Regular-Gewicht angezeigt), und es war möglich, dass der Text-Renderer die Fettschrift simulierte.

Soll ich meinem Projekt 45 FontLoader hinzufügen, einen für jeden TTF? Oder gibt es eine Möglichkeit, alle TTF ohne Notwendigkeit für FontLoader geladen werden?

+0

Oder tun Sie es einfach in C++? 'QDirIterator it (":/fonts/*. Ttf "); while (it.hasNext()) QFontDatabase :: addApplicationFont (it.next()); ' – peppe

+0

@peppe Danke für den Code, der hilfreich sein kann. Ich würde jedoch lieber bei reinem QML bleiben. – Phrogz

+0

Wie Sie vielleicht in meiner Antwort auf Ihre andere Frage qml Schrift finden, würde ich sagen oben Vorschlag ist ein Weg zu gehen, so ist leider reine QML-Schriftart-Unterstützung in den meisten Fällen unlösbare Schmerzen ... – evilruff

Antwort

1

edit: Mit einer Liste von Zeichenfolgen und URLs können Sie einen Repeater verwenden, um viele Schriften zu laden. Component.onCompleted: Das Skript liest die Liste der URLs, aus denen die Schriftarten geladen werden sollen, und fügt sie der Liste hinzu. Da das Repeater-Modell ein ListModel ist, erstellt der Repeater beim Hinzufügen zu ListModel neue Elemente. Die Repositionierung steht Repeatern auch auf diese Weise zur Verfügung, wird hier jedoch nicht verwendet. Hinweis: Das Laden der URL-Liste ist in diesem Code nicht enthalten.

+0

Bitte erläutern Sie, wie dieser Code die Fragen des OPs beantwortet: "_Ich sollte 45 FontLoader zu meinem Projekt hinzufügen, einen für jeden TTF? Oder gibt es eine Möglichkeit, alle TTFs ohne FontLoader zu laden? _". Bitte versuchen Sie, Code als Antwort nicht zu verlieren und versuchen Sie zu erklären, was er tut und warum. Ihr Code ist möglicherweise nicht offensichtlich für Personen, die nicht über die entsprechende Codiererfahrung verfügen. Bitte bearbeiten Sie Ihre Antwort, um [Klärung, Kontext und versuchen Sie, Einschränkungen, Annahmen oder Vereinfachungen in Ihrer Antwort zu erwähnen.] (Https://stackoverflow.com/help/how-to-answer) –