2017-04-06 1 views
0

Ich möchte die Schriftgröße eines Label so skalieren:QML Qt Quick Control 2: Maßstab Schriftgröße ohne Schleife Bindung

Label { 
    font.size: font.size*0.8 
} 

Natürlich ist dies eine Bindungsschleife erzeugt. Gibt es eine Möglichkeit, dies zu tun, ohne ein verstecktes Label Element zu erstellen?

Label { 
    id: hiddenLabel 
} 

Label { 
    font.size: hiddenLabel.font.size*0.8 
} 

das gesamte Etikett Skalierung ist nicht optimal, da die Textqualität abnimmt:

Label { 
    scale: 0.8 
} 

Grüße,

Antwort

6

Zusätzlich zu den anderen Optionen bereits erwähnt, gibt es Qt.application.font auch:

Label { 
    font.pixelSize: Qt.application.font.pixelSize * 0.8 
} 

Diese schreibgeschützte Eigenschaft enthält die Standardanwendung Schrift als von QGuiApplication::font() zurückgegeben.

Die commit message for the change erwähnt andere Optionen, die zu dem Zeitpunkt in Betracht gezogen wurden:

  • <h3>Large text</h3>“ - fügt unter dem Text besonders viel Platz, da es ein HTML-Element ist, also nicht wirklich nützlich, wenn Sie eine wollen Anständiges Layout.
  • Kodierung einer Pixelgröße. Funktioniert in Kombination mit Qt :: AA_EnableHighDpiScaling einwandfrei und solange Sie die korrekte Größe erraten, die für jedes Gerät/Display, das Sie anvisieren, funktioniert. Funktioniert nicht ohne Einstellung Qt :: AA_EnableHighDpiScaling.
  • Verwenden von FontMetrics/TextMetrics. Funktioniert gut, ist aber ein bisschen ausführlich.
  • Verwenden Sie ein leeres Textelement. Erstellt ein unnötiges Element. Wurde von FontMetrics/TextMetrics ersetzt.
  • defaultPixelSize/implizitePixelSize und defaultPointSize/implicitPointSize. Es gibt bereits font-related Eigenschaften außerhalb der Schriftart gruppierten Eigenschaft, so dass dies nicht fehl am Platz wäre, aber die API ist bereits ziemlich groß.

Wenn Sie wirklich die Schriftgröße auf der speziellen Kontrolle müssen zur Basis, die Sie verwenden, ist die einzige Art und Weise gewährleistet eine „leere“/„default konstruierten“ Instanz dieser Steuerelement zu erstellen:

Button { 
    id: dummyButton 
} 

Button { 
    font.pixelSize: dummyButton.font.pixelSize * 0.8 
} 

Dies ist, weil jeder Stil verschiedene Schriftgrößen für verschiedene Arten von Steuerelementen hat. Siehe zum Beispiel die Material style's theme code.

1

Sie könnten anstelle einer Bindung einen Auftrag verwenden, indem Sie die Schriftgröße in Component.onCompleted Einstellung

Label { 
    text: 'Þetta reddast' 
    Component.onCompleted: font.pixelSize *= 0.8 
} 

Dies hat den negativen Nebeneffekt tha t Der Text wird zweimal ausgegeben: einmal für die größere Größe und dann wieder für die kleinere Größe.

Ich würde wahrscheinlich einen Satz von fonts mit den richtigen Größen in einer style.qml singleton als proposed here definieren. Dort können Sie die Standardschriftarten der Anwendungen verwenden, um die relativen Größen initial zu berechnen, damit Sie sich später nicht darum kümmern müssen.

0
FontMetrics { 
    id: fontMetrics 
} 

Label { 
    font.size: fontMetrics.font.size * 0.8 
} 
+1

Hallo, im Zusammenhang mit der 'Controls' dies werden Sie keine zuverlässigen Ergebnisse, wie zum Beispiel könnten Sie ein' ApplicationWindow' als Root-Objekt verwenden und eine Schriftgröße there.This gesetzt würde das 'Label' propagiert werden aber nicht zur Nichtkontrolle 'FontMetrics'. Daher ist die Standardschriftgröße des "Label" und des "FontMetrics" nicht gleich notwendig - und damit auch nicht der 0.8te Faktor. Siehe [** hier **] (https://doc.qt.io/qt-5/qml-qtquick-controls2-control.html#font-prop) – derM

+0

@derM, das nützlich ist, wenn es nicht an ein Wurzelelement gebunden ist . Gibt es Nicht-Root-Elemente, die das können? Über die 'FontMetrics': Ich mag es, alles (auch das Nicht-Text-Zeug) relativ dazu zu definieren. – Velkan

+0

Sie können die angehängte ['ApplicationWindow'] (https://doc.qt.io/qt-5/qml-qtquick-controls2-applicationwindow.html#window-attached-prop) Eigenschaft verwenden, um die Schriftart in der Groß-/Kleinschreibung zu erhalten auf die @derM verweist, und dann auf 'fontMetrics'. ZB: 'font: ApplicationWindow.window.font' Obwohl verschiedene Steuerelemente unterschiedliche Standardgrößen haben, funktioniert dies nur für bestimmte Steuerelemente: http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports /controls/material/qquickmaterialtheme.cpp#n67 – Mitch

Verwandte Themen