Auf dieser Seite

MultiEffect QML Type

Wendet einen Nachbearbeitungseffekt auf ein Objekt an. Mehr...

Import Statement: import QtQuick.Effects
Inherits:

Item

Eigenschaften

Signale

Detaillierte Beschreibung

Der MultiEffect-Typ, der Nachfolger von Qt Graphical Effects aus Qt 5, wendet einen Nachbearbeitungseffekt auf das Element source an. Im Gegensatz zum Modul Qt Graphical Effects ermöglicht MultiEffect die Kombination mehrerer Effekte (Weichzeichnen, Schatten, Einfärben usw.) in einem einzigen Element und Shader. Sie können MultiEffect verwenden, wenn Sie nur einen einzigen Effekt ohne zusätzlichen Overhead benötigen, aber Sie können es auch verwenden, um mehrere Effekte auf ein Element anzuwenden, ohne die Kosten für mehrere Rendering-Durchgänge.

MultiEffect wurde speziell für die meisten gängigen Effekte entwickelt und kann leicht animiert werden. Wenn MultiEffect den von Ihnen benötigten Effekt nicht enthält, können Sie mit Qt Quick Effect Maker einen eigenen Effekt implementieren. Weitere Informationen über Shader-Effekte finden Sie in der Referenzdokumentation ShaderEffect.

Beachten Sie, dass der Typ MultiEffect ein neues visuelles Element neben dem Ausgangselement rendert. Um den Effekt auf das Ausgangselement anzuwenden, müssen Sie das neue MultiEffekt-Element an der Position des Ausgangselements platzieren. Wenn das Quellelement und das MultiEffekt-Element nicht undurchsichtig sind, können beide Elemente sichtbar sein, so dass Sie möglicherweise nicht den gewünschten Effekt erzielen. Um das Quellelement auszublenden, führen Sie einen der folgenden Schritte aus:

  • Stellen Sie visible: false für das Quellelement ein. In diesem Fall wird das Quellelement überhaupt nicht gerendert und kann keine Berührungs- oder Klickeingaben empfangen.
  • Stellen Sie opacity: 0 für das Quellelement ein. In diesem Fall ist das Quellelement vollständig transparent, kann aber weiterhin Berührungs- oder Klickeingaben empfangen.

Beispiel für die Verwendung

Das folgende Beispiel zeigt, wie Sie einen Sättigungseffekt auf ein Element anwenden:

Qt-Logo in Graustufen mit vollständigem Entsättigungseffekt

import QtQuick
import QtQuick.Effects

...
Image {
    id: sourceItem
    source: "qt_logo_green_rgb.png"
    // Hide the source item, otherwise both the source item and
    // MultiEffect will be rendered
    visible: false
    // or you can set:
    // opacity: 0
}
// Renders a new item with the specified effects rendered
// at the same position where the source item was rendered
MultiEffect {
    source: sourceItem
    anchors.fill: sourceItem
    saturation: -1.0
}

Das folgende Beispiel zeigt, wie Sie einen Sättigungseffekt auf ein layered Item anwenden:

Qt-Logo in Graustufen mit vollständigem Entsättigungseffekt

import QtQuick
import QtQuick.Effects

...
Image {
    id: sourceItem
    source: "qt_logo_green_rgb.png"
    layer.enabled: true
    // For the layered items, you can assign a MultiEffect directly
    // to layer.effect.
    layer.effect: MultiEffect {
        saturation: -1.0
    }
}

Das folgende Beispiel zeigt, wie Sie mehrere Effekte gleichzeitig anwenden können:

Qt-Logo mit grünem Glühen, das Helligkeit, Sättigung und Unschärfeeffekte kombiniert

import QtQuick
import QtQuick.Effects

...
MultiEffect {
    source: sourceItem
    anchors.fill: sourceItem
    brightness: 0.4
    saturation: 0.2
    blurEnabled: true
    blurMax: 64
    blur: 1.0
}

Das folgende Beispiel zeigt, wie Sie die Effekte Maske, Einfärbung und Helligkeit zusammen anwenden können, um ein Element auszublenden. Diese Art des Ein- und Ausblendens von Elementen kann z.B. an einen Schiebereglerwert oder Animationen wie NumberAnimation gebunden werden. Beachten Sie, dass die Eigenschaft visible auf false gesetzt ist, wenn das Element vollständig ausgeblendet ist, um unnötiges Rendern des Effekts zu vermeiden.

Vier Stufen der Ausblendung des Qt-Logos mit Maske und Einfärbung, von sichtbarem Grün bis zu aufgelösten rosa Partikeln

import QtQuick
import QtQuick.Effects
import QtQuick.Controls.Material

...
MultiEffect {
    property real effectAmount: effectSlider.value
    source: sourceItem
    anchors.fill: sourceItem
    brightness: effectAmount
    colorizationColor: "#ff20d0"
    colorization: effectAmount
    maskEnabled: true
    maskSource: Image {
        source: "mask.png"
    }
    maskSpreadAtMin: 0.2
    maskThresholdMin: effectAmount
    visible: effectAmount < 1.0
}
Slider {
    id: effectSlider
    anchors.bottom: parent.bottom
    anchors.horizontalCenter: parent.horizontalCenter
}

Leistung

Für eine optimale Leistung gibt es einige Dinge zu beachten:

  • Um einen optimalen Shader zu erhalten, aktivieren Sie nur die Effekte, die Sie tatsächlich verwenden (siehe blurEnabled, shadowEnabled, maskEnabled). Einfache Farbeffekte (brightness, contrast, saturation, colorization) sind immer aktiviert, so dass ihre Verwendung keinen zusätzlichen Overhead verursacht.
  • Beachten Sie die Leistungshinweise zu den Eigenschaften, die den Shader oder die Größe des Effektobjekts ändern können, und ändern Sie diese nicht während der Animationen.
  • Wenn der MultiEffekt nicht verwendet wird, denken Sie daran, die Eigenschaft visible auf false zu setzen, um das Rendern der Effekte im Hintergrund zu vermeiden.
  • Weichzeichner und Schatten sind die stärksten Effekte. Erhöhen Sie bei diesen Effekten lieber blurMultiplier als blurMax und vermeiden Sie die Verwendung von source -Elementen, die animiert werden, damit die Unschärfe nicht bei jedem Bild neu erzeugt werden muss.
  • Wenden Sie Effekte auf QML-Elemente mit optimaler Größe an, denn mehr Pixel bedeuten mehr Arbeit für die GPU. Wenn Sie den Unschärfe-Effekt auf den gesamten Hintergrund anwenden, denken Sie daran, autoPaddingEnabled false zu setzen, da der Effekt sonst "außerhalb" des Fensters/Bildschirms wächst.

Sie können die ShaderEffectSource und die MultiEffect kombinieren:

  • Um dasselbe Ausgangselement in mehreren Effekten zu verwenden und es unverändert zu lassen.
  • Sie können einen Teil des Quellobjekts verwenden, indem Sie ShaderEffectSource.sourceRect verwenden.
  • Um die Auflösung des Quellobjekts zu verringern, z. B. für eine bessere Leistung, verwenden Sie die Eigenschaft ShaderEffectSource.textureSize.

Dokumentation der Eigenschaft

autoPaddingEnabled : bool

Wenn Weichzeichner- oder Schatteneffekte aktiviert sind und diese Option auf "true" gesetzt ist (Standard), wird die Größe des Elements automatisch auf der Grundlage von blurMax und blurMultiplier aufgefüllt. Beachten Sie, dass paddingRect immer zur Größe addiert wird.

Unscharfe Bilder im Vergleich von autoPaddingEnabled true mit zusätzlichem Platz und false mit abgeschnittenen Kanten

Hinweis zur Leistung: Die Elementgröße sollte für eine optimale Leistung so klein wie möglich sein.

Hinweis zur Leistung: Verursacht eine Größenänderung des Objekts; ändern Sie diese Eigenschaft nicht während der Animation.

Siehe auch paddingRect.

blur : real

Diese Eigenschaft legt fest, wie stark die Unschärfe (Radius) auf die Quelle angewendet wird.

Der Wert reicht von 0,0 (keine Unschärfe) bis 1,0 (volle Unschärfe). Standardmäßig ist die Eigenschaft auf 0.0 (keine Änderung) eingestellt. Der Grad der Unschärfe wird durch blurMax und blurMultiplier beeinflusst.

Hinweis zur Leistung: Wenn Sie an keinem Punkt der Weichzeichnungsanimationen nahe an 1,0 herankommen müssen, sollten Sie für eine optimale Leistung blurMax oder blurMultiplier reduzieren.

blurEnabled : bool

Aktiviert den Weichzeichner-Effekt.

Hinweis zur Leistung: Verursacht eine Shader-Änderung; ändern Sie diese Eigenschaft nicht während der Animation.

blurMax : int

Diese Eigenschaft definiert den maximalen Pixelradius, den die Unschärfe mit dem Wert 1.0 erreicht.

Der sinnvolle Bereich für diesen Wert reicht von 2 (leichte Unschärfe) bis 64 (starke Unschärfe). Standardmäßig ist die Eigenschaft auf 32 eingestellt. Wählen Sie für eine optimale Leistung einen so kleinen Wert wie nötig.

Hinweis: Dies wirkt sich sowohl auf die Weichzeichner- als auch auf die Schatteneffekte aus.

Hinweis zur Leistung: Verursacht eine Shader-Änderung; ändern Sie diese Eigenschaft nicht während der Animation.

Hinweis zur Leistung: Verursacht eine Größenänderung des Elements; ändern Sie diese Eigenschaft nicht während der Animation.

blurMultiplier : real

Diese Eigenschaft definiert einen Multiplikator für die Erweiterung des Unschärferadius.

Der Wert reicht von 0,0 (nicht multipliziert) bis inf. Standardmäßig ist die Eigenschaft auf 0.0 eingestellt. Durch Erhöhen des Multiplikators wird der Unschärferadius erweitert, aber die Qualität der Unschärfe verringert. Diese Option ist für einen größeren Unschärferadius leistungsfähiger als blurMax, da sie die Anzahl der Texturabfragen nicht erhöht.

Hinweis: Dies gilt sowohl für Weichzeichner- als auch für Schatteneffekte.

Hinweis zur Leistung: Verursacht eine Größenänderung des Objekts; ändern Sie diese Eigenschaft nicht während der Animation.

brightness : real

Diese Eigenschaft legt fest, wie stark die Helligkeit der Quelle erhöht oder verringert wird.

Der Wert reicht von -1,0 bis 1,0. Standardmäßig ist die Eigenschaft auf 0.0 (keine Änderung) eingestellt.

colorization : real

Diese Eigenschaft legt fest, wie stark die Quelle mit colorizationColor eingefärbt wird.

Der Wert reicht von 0,0 (nicht eingefärbt) bis 1,0 (vollständig eingefärbt). Standardmäßig ist die Eigenschaft auf 0.0 (keine Änderung) eingestellt.

colorizationColor : color

Diese Eigenschaft definiert den RGBA-Farbwert, der zur Einfärbung der Quelle verwendet wird.

Standardmäßig ist die Eigenschaft auf Qt.rgba(1.0, 0.0, 0.0, 1.0) (rot) eingestellt.

Siehe auch colorization.

contrast : real

Diese Eigenschaft legt fest, wie stark der Quellenkontrast erhöht oder verringert wird.

Der Wert reicht von -1,0 bis 1,0. Standardmäßig ist die Eigenschaft auf 0.0 (keine Änderung) eingestellt.

fragmentShader : string [read-only]

Nur-Lese-Zugriff auf den Dateinamen des aktuell verwendeten Fragment-Shaders.

hasProxySource : bool [read-only]

Gibt true zurück, wenn MultiEffect intern ShaderEffectSource für das Element source erstellt, und false, wenn das Element source so verwendet wird, wie es ist. Wenn die Quelle z. B. das Element Image oder Item ist und layer.enabled auf true gesetzt ist, wird diese zusätzliche Proxy-Quelle nicht benötigt.

itemRect : rect [read-only]

Nur-Lese-Zugriff auf das Rechteck des Effekts item. Dies kann z. B. verwendet werden, um den Bereich zu sehen, den das Element abdeckt.

Siehe auch paddingRect und autoPaddingEnabled.

maskEnabled : bool

Aktiviert den Maskeneffekt.

Hinweis zur Leistung: Verursacht eine Shader-Änderung; ändern Sie diese Eigenschaft nicht während der Animation.

maskInverted : bool

Diese Eigenschaft schaltet die Maske auf die gegenüberliegende Seite um; anstatt den Inhalt außerhalb von maskThresholdMin und maskThresholdMax zu maskieren, wird der Inhalt zwischen diesen beiden Seiten wegmaskiert.

Standardmäßig ist die Eigenschaft auf false eingestellt.

maskSource : Item

Quellenelement für den Maskeneffekt. Sollte auf ShaderEffectSource zeigen, auf ein Element, bei dem layer.enabled auf true gesetzt ist, oder auf ein Element, das direkt als Texturquelle verwendet werden kann (z. B. Image). Der Alphakanal des Quellobjekts wird für die Maskierung verwendet.

Wenn maskSource und die Quelle unterschiedliche Abmessungen haben, wird das maskSource-Bild auf die Größe der Quelle gestreckt.

maskSpreadAtMax : real

Mit dieser Eigenschaft wird die Glätte der Maskenkanten in der Nähe von maskThresholdMax definiert. Durch die Verwendung höherer Spreizungswerte wird der Übergang von den transparenten Maskenpixeln zu den undurchsichtigen Maskenpixeln weicher, da dazwischen interpolierte Werte hinzugefügt werden.

Der Wert reicht von 0,0 (scharfer Maskenrand) bis 1,0 (glatter Maskenrand). Standardmäßig ist die Eigenschaft auf 0.0 eingestellt.

maskSpreadAtMin : real

Mit dieser Eigenschaft wird die Glätte der Maskenkanten in der Nähe von maskThresholdMin definiert. Durch die Einstellung höherer Spreizungswerte wird der Übergang von den transparenten Maskenpixeln zu den undurchsichtigen Maskenpixeln weicher, indem dazwischen interpolierte Werte hinzugefügt werden.

Der Wert reicht von 0,0 (scharfer Maskenrand) bis 1,0 (glatter Maskenrand). Standardmäßig ist die Eigenschaft auf 0.0 eingestellt.

maskThresholdMax : real

Diese Eigenschaft definiert einen oberen Schwellenwert für die Maskenpixel. Die Maskenpixel, deren Alphawert unter dieser Eigenschaft liegt, werden verwendet, um die entsprechenden Pixel des Quellobjekts vollständig zu maskieren. Die Maskenpixel, die einen höheren Alphawert haben, werden verwendet, um das Ausgangselement in der Anzeige zu alphabeln.

Der Wert reicht von 0,0 (Alphawert 0) bis 1,0 (Alphawert 255). Standardmäßig ist die Eigenschaft auf 1.0 eingestellt.

maskThresholdMin : real

Diese Eigenschaft definiert einen unteren Schwellenwert für die Maskenpixel. Die Maskenpixel, deren Alphawert unter dieser Eigenschaft liegt, werden verwendet, um die entsprechenden Pixel des Quellobjekts vollständig zu maskieren. Die Maskenpixel, die einen höheren Alphawert haben, werden verwendet, um das Ausgangselement auf der Anzeige zu alphabeln.

Der Wert reicht von 0,0 (Alphawert 0) bis 1,0 (Alphawert 255). Standardmäßig ist die Eigenschaft auf 0.0 eingestellt.

paddingRect : rect

Legen Sie dies fest, um die Größe des Objekts manuell zu erhöhen, damit die Unschärfe und/oder die Schatten passen. Wenn autoPaddingEnabled wahr ist und paddingRect nicht festgelegt ist, wird das Element so aufgefüllt, dass es auf der Grundlage von blurMax und blurMultiplier maximal unscharfes Element passt. Wenn Sie den Schatten aktivieren, müssen Sie normalerweise shadowHorizontalOffset und shadowVerticalOffset berücksichtigen und diesen paddingRect entsprechend anpassen.

Unten sehen Sie ein Beispiel für die Anpassung von paddingRect, wobei autoPaddingEnabled auf false gesetzt ist, damit der Schatten in das Element MultiEffect passt.

Zwei Qt-Logos mit Schatten im Vergleich zu paddingRect-Werten, die einen beschnittenen Schatten bei Null und einen vollen Schatten mit Padding zeigen

Hinweis zur Leistung: Die Elementgröße sollte für eine optimale Leistung so klein wie möglich sein.

Hinweis zur Leistung: Verursacht eine Größenänderung des Elements; ändern Sie diese Eigenschaft nicht während der Animation.

Siehe auch autoPaddingEnabled.

saturation : real

Diese Eigenschaft legt fest, wie stark die Sättigung der Quelle erhöht oder verringert wird.

Der Wert reicht von -1.0 (völlig entsättigt) bis inf. Standardmäßig ist die Eigenschaft auf 0.0 (keine Änderung) eingestellt.

shadowBlur : real

Diese Eigenschaft legt fest, wie stark die Unschärfe (Radius) auf den Schatten angewendet wird.

Der Wert reicht von 0,0 (keine Unschärfe) bis 1,0 (volle Unschärfe). Standardmäßig ist die Eigenschaft auf 1.0 eingestellt. Die Stärke der vollen Unschärfe wird durch blurMax und blurMultiplier beeinflusst.

Hinweis zur Leistung: Die optimale Methode zur Verringerung der Schattenunschärfe besteht darin, blurMax zu verkleinern (wenn sie nicht für die Objektunschärfe benötigt wird). Denken Sie daran, blurMax nicht während Animationen zu verändern.

shadowColor : color

Diese Eigenschaft definiert den RGBA-Farbwert, der für den Schatten verwendet wird. Sie ist z. B. nützlich, wenn ein Schatten verwendet wird, um einen Glüheffekt zu simulieren.

Standardmäßig ist die Eigenschaft auf Qt.rgba(0.0, 0.0, 0.0, 1.0) (schwarz) eingestellt.

shadowEnabled : bool

Aktiviert den Schatteneffekt.

Hinweis zur Leistung: Verursacht eine Shader-Änderung; ändern Sie diese Eigenschaft nicht während der Animation.

shadowHorizontalOffset : real

Diese Eigenschaft definiert den horizontalen Versatz des Schattens von der Objektmitte.

Der Wert reicht von -inf bis inf. Standardmäßig ist die Eigenschaft auf 0.0 eingestellt.

Hinweis: Wenn Sie die Position des Schattens von der Mitte weg verschieben und shadowBlur hinzufügen, müssen Sie möglicherweise auch paddingRect entsprechend erhöhen, wenn Sie möchten, dass der Schatten nicht abgeschnitten wird.

shadowOpacity : real

Diese Eigenschaft definiert die Deckkraft des Schlagschattens. Dieser Wert wird mit dem Alphawert shadowColor multipliziert.

Der Wert reicht von 0,0 (völlig transparent) bis 1,0 (völlig undurchsichtig). Standardmäßig ist die Eigenschaft auf 1.0 eingestellt.

shadowScale : real

Diese Eigenschaft definiert den Maßstab des Schattens. Die Skalierung wird von der Mitte des Objekts aus angewendet.

Der Wert reicht von 0 bis inf. Standardmäßig ist die Eigenschaft auf 1.0 eingestellt.

Hinweis: Wenn Sie shadowScale erhöhen, müssen Sie möglicherweise auch paddingRect entsprechend erhöhen, damit der Schatten nicht abgeschnitten wird.

shadowVerticalOffset : real

Diese Eigenschaft definiert den vertikalen Abstand des Schattens von der Objektmitte.

Der Wert reicht von -inf bis inf. Standardmäßig ist die Eigenschaft auf 0.0 eingestellt.

Hinweis: Wenn Sie die Position des Schattens von der Mitte weg verschieben und shadowBlur hinzufügen, müssen Sie möglicherweise auch paddingRect entsprechend erhöhen, wenn Sie möchten, dass der Schatten nicht abgeschnitten wird.

source : Item

Diese Eigenschaft enthält das Element, das als Quelle für den Effekt verwendet werden soll. Falls erforderlich, wird MultiEffect intern eine ShaderEffectSource als Texturquelle erzeugen.

Hinweis: Es wird nicht unterstützt, den Effekt sich selbst einschließen zu lassen, z.B. indem man die Quelle auf das Elternteil des Effekts setzt.

Hinweis: Wenn die Quelle layer.enabled auf true gesetzt ist, wird sie direkt verwendet. Dies ist gut für die Leistung und oft erwünscht, wenn die Quelle versteckt ist. Bleibt die Quelle jedoch sichtbar und der Effekt fügt Füllung hinzu (autoPaddingEnabled, paddingRect), kann diese Füllung das Aussehen der Quelle beeinflussen.

Siehe auch hasProxySource.

vertexShader : string [read-only]

Nur-Lese-Zugriff auf den Dateinamen des aktuell verwendeten Vertex-Shaders.

Signal-Dokumentation

shaderChanged()

Dieses Signal wird ausgegeben, wenn sich der verwendete Shader ändert.

Hinweis: Der entsprechende Handler ist onShaderChanged.

Siehe auch fragmentShader und vertexShader.

© 2026 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.