RectangularShadow QML Type
Erzeugt ein geglättetes Rechteck, das sich zum Beispiel für Schatten- und Glüheffekte eignet. Mehr...
Import Statement: | import QtQuick.Effects |
Inherits: |
Eigenschaften
- antialiasing : bool
- blur : real
- cached : bool
- color : color
- material : item
- offset : vector2d
- radius : real
- spread : real
Detaillierte Beschreibung
RectangularShadow ist ein abgerundetes Rechteck, auf das ein Weichzeichner angewendet wird. Die Leistung von RectangularShadow ist viel besser als eine allgemeine Methode, die einen unscharfen Schatten/Glühen eines beliebig geformten Elements erzeugt.
Das folgende Beispiel zeigt, wie man einem Rectangle einen Schatten hinzufügt:
import QtQuick import QtQuick.Effects ... RectangularShadow { anchors.fill: myRectangle offset.x: -10 offset.y: -5 radius: myRectangle.radius blur: 30 spread: 10 color: Qt.darker(myRectangle.color, 1.6) } Rectangle { id: myRectangle anchors.centerIn: parent width: 200 height: 100 radius: 50 color: "#c0d0f0" } |
Die API von RectangularShadow ist ähnlich wie die von CSS box-shadow, mit Werten für Farbe, Offset, Spread und Blur. Zusätzlich enthält RectangularShadow API:
real
radius: Steuert den Abrundungsradius, der auf die Ecken des Rechtecks angewendet wird. Im Vergleich zu CSS box-shadow, das den Radius vom übergeordneten Element erbt, erwartet RectangularShadow, dass der Benutzer ihn festlegt. Dies ermöglicht es, verschiedene Radien zu verwenden und den RectangularShadow getrennt von seinem übergeordneten Element zu bewegen.bool
cached Ermöglicht das Zwischenspeichern der unscharfen Schattentextur. Dies erhöht die Speichernutzung, während die Rendering-Leistung verbessert werden kann, insbesondere bei größeren Schatten, die sich nicht dynamisch ändern.item
material RectangularShadow: Enthält das ShaderEffect -Element des RectangularShadow zur erweiterten Verwendung. Dies ermöglicht zum Beispiel die Erweiterung des Effekts mit einem benutzerdefinierten Shader.
Die Rendering-Ausgabe entspricht auch dem CSS-Box-Shadow, mit einigen bemerkenswerten Unterschieden. Diese Unterschiede bestehen, um den RectangularShadow so leistungsfähig wie möglich zu machen.
- Die Unschärfe wird im Shader mathematisch berechnet, anstatt die Gaußsche Unschärfe zu verwenden, die bei CSS-Box-Shadow-Implementierungen häufig zum Einsatz kommt. Dadurch sieht der Schatten etwas anders aus, insbesondere bei größeren Unschärfewerten.
- Alle Ecken des Rechtecks müssen einen gleichmäßigen Radius haben. Wenn Sie einen Schatten für ein Rectangle mit unterschiedlichen Radien erstellen, wählen Sie den am besten passenden Radius für den Schatten oder verwenden Sie eine alternative Schattenmethode, z. B. MultiEffect.
Hier ist eine Tabelle mit Screenshots zum Vergleich der Rendering-Ausgabe von RectangularShadow und CSS box-shadow im Chrome-Browser. Das Element ganz rechts ist RectangularShadow in blur multipliziert mit 1.2
(also 24
, 48
, 48
) für eine bessere Übereinstimmung.
Typ | CSS-Box-Schatten | RechteckigerSchatten | RectangularShadow + zusätzliche Unschärfe |
---|---|---|---|
offset: (0, 0) blur: 20 spread: 0 | |||
offset: (-10, -20) blur: 40 spread: 0 | |||
offset: (-10, -20) blur: 40 spread: 10 |
RectangularShadow erweitert die Größe des Schattens um einen exakten Wert in Bezug auf den Unschärfegrad, während einige andere Schatten (einschließlich CSS box-shadow) einen Multiplikator für die Größe haben. Die Größe des Schattenelements innerhalb eines RectangularShadow ist:
width = rectangularShadow.width + 2 * blur + 2 * spread height = rectangularShadow.height + 2 * blur + 2 * spread
Zum Beispiel beträgt die Größe des Schattenelements im unten stehenden Code 280x180 Pixel. Radius- oder Offsetwerte haben keinen Einfluss auf die Größe des Schattenelements.
RectangularShadow { width: 200 height: 100 blur: 30 spread: 10 radius: 20 }
Eigenschaft Dokumentation
antialiasing : bool |
Wird verwendet, um zu entscheiden, ob der Schatten Antialiasing verwenden soll oder nicht. Bei true
wird ein Ein-Pixel-Antialiasing verwendet, auch wenn blur 0
ist.
Der Standardwert ist true
.
blur : real |
Diese Eigenschaft legt fest, wie viele Pixel außerhalb des Elementbereichs vom Schatten erreicht werden.
Der Wert reicht von 0.0 (keine Unschärfe) bis inf (unendliche Unschärfe). Der Standardwert ist 10.0
.
Hinweis: Um mit der CSS-Box-Shadow-Rendering-Ausgabe übereinzustimmen, ist der optimale Unschärfebetrag etwa so: 1.2 * cssBlur
cached : bool |
Mit dieser Eigenschaft können die Ausgabepixel des Effekts zwischengespeichert werden, um die Rendering-Leistung zu verbessern.
Jedes Mal, wenn die Effekteigenschaften geändert werden, müssen die Pixel im Cache aktualisiert werden. Der Speicherverbrauch erhöht sich, da für die Speicherung der Effektausgabe ein zusätzlicher Speicherplatz benötigt wird.
Es wird empfohlen, den Cache zu deaktivieren, wenn die Quelle oder die Effekteigenschaften animiert werden.
Der Standardwert ist false
.
color : color |
Diese Eigenschaft definiert den RGBA-Farbwert, der für den Schatten verwendet wird.
Der Standardwert ist Qt.rgba(0.0, 0.0, 0.0, 1.0)
(schwarz).
material : item |
Diese Eigenschaft enthält das Element ShaderEffect des Schattens. Sie können diese Eigenschaft verwenden, um die Reichweite des Schattens zu visualisieren, da das Effekt-Element aufgrund von blur, offset und spread oft eine andere Position und Größe hat als das RectangularShadow Element.
Das Material kann auch durch ein benutzerdefiniertes Material ersetzt werden. Das Standardmaterial ist ein ShaderEffect mit dem folgenden fragmentShader:
#version 440 layout(location = 0) in vec2 texCoord; layout(location = 1) in vec2 fragCoord; layout(location = 0) out vec4 fragColor; layout(std140, binding = 0) uniform buf { mat4 qt_Matrix; float qt_Opacity; vec4 color; vec3 iResolution; vec2 rectSize; float radius; float blur; }; float roundedBox(vec2 centerPos, vec2 size, float radii) { return length(max(abs(centerPos) - size + radii, 0.0)) - radii; } void main() { float box = roundedBox(fragCoord - iResolution.xy * 0.5, rectSize, radius); float a = 1.0 - smoothstep(0.0, blur, box); fragColor = color * qt_Opacity * a * a; }
Qt Quick Effect Maker enthält den Knoten RectangularShadow, der als Ausgangspunkt für ein benutzerdefiniertes Material verwendet werden kann. Sie können den exportierten Effekt, der diesen Knoten enthält, direkt als Material RectangularShadow verwenden.
RectangularShadow { ... material: MyShadowEffect { } }
Um wieder das Standardmaterial zu verwenden, setzen Sie die Materialeigenschaft auf null
.
offset : vector2d |
Diese Eigenschaft definiert den Positionsversatz, der für den Schatten verwendet wird. Dieser Offset wird an die Schattenposition angehängt, relativ zur Position des Elements RectangularShadow.
Der Standardwert ist Qt.vector2d(0.0, 0.0)
(kein Versatz).
radius : real |
Diese Eigenschaft legt den Eckenradius fest, der verwendet wird, um einen Schatten mit abgerundeten Ecken zu zeichnen.
Der Wert reicht von 0,0 bis zur Hälfte der effektiven Breite oder Höhe des Elements, je nachdem, welcher Wert kleiner ist.
Der Standardwert ist 0
.
spread : real |
Diese Eigenschaft legt fest, wie stark der Schatten in Pixeln ausgebreitet (erweitert) wird. Diese Ausdehnung wird an die Schattengröße angehängt, relativ zur Größe des Elements RectangularShadow.
Der Wert reicht von -inf bis inf. Der Standardwert ist 0.0
.
Hinweis: Das Verhalten des Radius mit spread entspricht dem CSS box-shadow Standard. Wenn also der Spread kleiner als der Radius ist, wächst der Schattenradius um den Betrag des Spread. Wenn der Spread größer wird, wächst der Radius nur teilweise. Siehe https://www.w3.org/TR/css-backgrounds-3/#shadow-shape. Wenn der Schattenradius synchron mit dem Schatten wachsen soll (wie bei der Firefox-CSS-Box-Shadow-Implementierung), erhöhen Sie die RectangularShadow width
und height
, anstatt spread
zu verwenden.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.