2016-04-23 8 views
0

Ich habe ein Fenster mit Buttons, TextFields, Labels etc. Diese haben alle gemeinsame Eigenschaften wie Schriftfamilie, Farbe, Größe usw. Was ich gerne tun könnte, ist eine Gruppierung dieser Eigenschaften zu definieren (textStyles.MainTitle oder textStyles.DescriptiveText usw.), die eine Schriftfamilie, Größe und Gewicht, Höhe und Farbe enthalten. Und dann in der QML-Datei würde ich etwas wie schreiben:Wie erstellt man eine benutzerdefinierte Gruppierung von Eigenschaften und wendet sie auf verschiedene Steuerelemente an?

myCustomProperty: textStyles.MainTitle 

und dies würde diese Werte auf die Kontrolle gelten. Wie kann ich das machen?

Antwort

1

QML-Steuerelemente werden durch die Implementierung ihrer jeweiligen Stile gestaltet, zum Beispiel für Button müssen Sie ein ButtonStyle implementieren.

Wie für die tatsächliche "Gruppierung" Sie können nur verwenden QtObject

property QtObject textStyles : QtObject { 
    property FontLoader mainTitle : FontLoader {...} 
    .... 
} 

Sie können auch gestylt Komponenten als dedizierte Typen erweitern:

// StyledText.qml

Text { 
    font.family: someFont 
    font.pixelSize: fontSize 
    color: someColor 
    font.italic: true 
    font.letterSpacing: -1 
    ... 
} 

Und dann verwenden Sie das nur durch StyledText {} anstatt wiederholt regelmäßige Elemente.

Wo/in welcher Datei platziere ich das QtObject-Snippet? Ich verstehe nicht was // StyledText.qml ist oder was ein FontLoader ist.

Wenn Sie es in Ihrer gesamten Anwendung verfügbar sein sollen, können Sie es als eine Eigenschaft Ihres Root-Objekts in main.qml setzen, dank dynamischem Scoping textStyles wird von jeder anderen Datei in Ihrem Projekt beheben. Sie können auch ganze Komponentenstile hinzufügen und im Projekt freigeben.

StyledText.qmlStyledText.qml ist nur eine zusätzliche qml-Datei, die Sie Ihrem Projekt hinzufügen, können Sie nur mit der Implementierung seiner Körper in einer vorhandenen qml-Datei, dann Rechtsklick auf und Refactoring auswählen -> Komponente in separate Datei verschieben.

Eine FontLoader ist nur eine reguläre QML-Komponente, die Sie verwenden können, um bestimmte Schriftarten zu laden und als Schriftquelle für Text zu verwenden. Sie müssen das nicht verwenden, Sie können auch Schriftfamilien aus Ihren Systemschriften verwenden. Der Font Loader ist nützlich für Schriften, die Sie mit Ihrer Anwendung bündeln.

+0

Danke, ich habe Beispiele wie diese gesehen, aber ich weiß nicht, wie man sie implementiert. Wo/in welcher Datei platziere ich das QtObject-Snippet? Ich verstehe nicht was // StyledText.qml ist oder was ein FontLoader ist. Ich weiß, dass ich einen ButtonStyle, einen CheckBoxStyle etc. für jeden Steuerungstyp implementieren kann. Was ich zu tun hoffte, war zu vermeiden, diesen Code für jede Art von Steuerelement zu wiederholen, und stattdessen in der Lage zu sein, eine Art von Enum zu definieren, die ich dann für jede Art von Steuerelement einstellen und die Schriftart- und Farbeigenschaften so einstellen lassen kann. – MusiGenesis

+0

@MusiGenesis siehe Antwort update – dtech

+0

Sorry für die Dichte, aber ich verstehe immer noch nicht, was ich wo setzen sollte (das ist eine geerbte App und ich verstehe nicht wirklich, wie es strukturiert ist). Ich habe nirgendwo eine main.qml-Datei. Es klingt wie dein zweites Beispiel, was zu tun ist (wenn es auch nur zwei Beispiele gibt, bin ich mir nicht sicher), was ich machen möchte. Ich habe eine Datei mit dem Namen LoginScreen.qml - setze ich den Text {} Block, den Sie erwähnen, in diese Datei oberhalb des bereits vorhandenen Fensters {}? Wie referenziere ich diesen Block von woanders in der Datei? – MusiGenesis