Image QML Type
Zeigt ein Bild an. Mehr...
Import Statement: | import QtQuick |
Inherits: | |
Inherited By: |
Eigenschaften
- asynchronous : bool
- autoTransform : bool
- cache : bool
- currentFrame : int
- fillMode : enumeration
- frameCount : int
- horizontalAlignment : enumeration
- mipmap : bool
- mirror : bool
- mirrorVertically : bool
(since 6.2)
- paintedHeight : real
- paintedWidth : real
- progress : real
- retainWhileLoading : bool
(since 6.8)
- smooth : bool
- source : url
- sourceClipRect : rect
- sourceSize : size
- status : enumeration
- verticalAlignment : enumeration
Detaillierte Beschreibung
Der Typ Bild zeigt ein Bild an.
Die Quelle des Bildes wird als URL mit der Eigenschaft source angegeben. Bilder können in allen von Qt unterstützten Standard-Bildformaten geliefert werden, einschließlich Bitmap-Formaten wie PNG und JPEG und Vektorgrafikformaten wie SVG. Wenn Sie animierte Bilder anzeigen möchten, verwenden Sie AnimatedSprite oder AnimatedImage.
Wenn die Eigenschaften width und height nicht angegeben werden, verwendet das Bild automatisch die Größe des geladenen Bildes. Wenn Sie die Breite und Höhe des Elements angeben, wird das Bild standardmäßig auf diese Größe skaliert. Dieses Verhalten kann durch Setzen der Eigenschaft fillMode geändert werden, so dass das Bild stattdessen gestreckt und gekachelt wird.
Es ist möglich, "@nx" high DPI syntax anzugeben.
Beispielverwendung
Das folgende Beispiel zeigt die einfachste Verwendung des Typs Bild.
import QtQuick Image { source: "pics/qtlogo.png" }
Komprimierte Texturdateien
Wenn dies von der Implementierung der zugrunde liegenden Grafik-API zur Laufzeit unterstützt wird, können Bilder auch in komprimierten Texturdateien geliefert werden. Der Inhalt muss eine einfache 2D-Textur im RGB(A)-Format sein. Die unterstützten Komprimierungsverfahren sind nur durch den zugrunde liegenden Treiber und die GPU begrenzt. Die folgenden Containerdateiformate werden unterstützt:
PKM
(seit Qt 5.10)KTX
(seit Qt 5.11)ASTC
(seit Qt 5.13)
Hinweis: Die beabsichtigte vertikale Ausrichtung eines Bildes in einer Texturdatei ist im Allgemeinen nicht gut definiert. Verschiedene Texturkompressionswerkzeuge haben unterschiedliche Voreinstellungen und Optionen, wann das vertikale Spiegeln des Eingabebildes durchgeführt werden soll. Wenn ein Bild aus einer Texturdatei auf dem Kopf stehend angezeigt wird, muss die Spiegelung möglicherweise im Asset-Konditionierungsprozess umgeschaltet werden. Alternativ kann das Image-Element selbst gespiegelt werden, indem entweder eine geeignete Transformation über die Eigenschaft transform angewendet wird oder, was noch bequemer ist, indem die Eigenschaft mirrorVertically gesetzt wird:
transform: [ Translate { y: -myImage.height }, Scale { yScale: -1 } ]
oder
mirrorVertically: true
Hinweis: Halbtransparente Originalbilder erfordern vor der Texturkomprimierung eine Alpha-Vormultiplikation, damit sie in Qt Quick korrekt angezeigt werden. Dies kann mit der folgenden ImageMagick-Befehlszeile durchgeführt werden:
convert foo.png \( +clone -alpha Extract \) -channel RGB -compose Multiply -composite foo_pm.png
Verwechseln Sie nicht die Containerformate, wie z.B. KTX
, mit dem Format der eigentlichen Texturdaten, die in der Containerdatei gespeichert sind. Das Lesen einer KTX
Datei wird zum Beispiel auf allen Plattformen unterstützt, unabhängig davon, welcher GPU-Treiber zur Laufzeit verwendet wird. Dies garantiert jedoch nicht, dass das komprimierte Texturformat, das von den Daten in der Datei verwendet wird, zur Laufzeit unterstützt wird. Wenn die KTX-Datei beispielsweise komprimierte Daten im Format ETC2 RGBA8
enthält und die zur Laufzeit verwendete 3D-Grafik-API-Implementierung ETC2
komprimierte Texturen nicht unterstützt, wird im Element Bild nichts angezeigt.
Hinweis: Die Unterstützung von komprimierten Texturformaten unterliegt nicht der Kontrolle von Qt, und es obliegt dem Anwendungs- oder Geräteentwickler, sicherzustellen, dass die komprimierten Texturdaten im geeigneten Format für die Zielumgebung(en) bereitgestellt werden.
Gehen Sie nicht davon aus, dass die Unterstützung für komprimierte Formate spezifisch für eine Plattform ist. Sie kann auch spezifisch für den Treiber und die 3D-API-Implementierung sein, die auf dieser bestimmten Plattform verwendet werden. In der Praxis können Implementierungen verschiedener 3D-Grafik-APIs (z. B. Vulkan und OpenGL) auf derselben Plattform (z. B. Windows) vom selben Hersteller für dieselbe Hardware einen unterschiedlichen Satz komprimierter Texturformate anbieten.
Wenn Sie sich nur an Desktop-Umgebungen (Windows, macOS, Linux) richten, wird allgemein empfohlen, die Formate DXTn
/BCn
zu verwenden, da diese von den Implementierungen von Direct 3D, Vulkan, OpenGL und Metal auf diesen Plattformen am meisten unterstützt werden. Im Gegensatz dazu sind für mobile oder eingebettete Geräte die Formate ETC2
oder ASTC
wahrscheinlich die bessere Wahl, da dies die Formate sind, die von den OpenGL ES-Implementierungen auf dieser Hardware unterstützt werden.
Eine Anwendung, die auf Desktop-, Mobil- und eingebetteter Hardware ausgeführt werden soll, sollte die Verwendung von komprimierten Texturen sorgfältig planen und entwerfen. Es ist sehr wahrscheinlich, dass es nicht ausreicht, sich auf ein einziges Format zu verlassen, und daher muss die Anwendung wahrscheinlich je nach Plattform verzweigen, um komprimierte Texturen in einem dort geeigneten Format zu verwenden, oder vielleicht in einigen Fällen auf die Verwendung komprimierter Texturen verzichten.
Automatische Erkennung der Dateierweiterung
Wenn die URL source auf eine nicht existierende lokale Datei oder Ressource hinweist, versucht das Image-Element, die Dateierweiterung automatisch zu erkennen. Wenn eine vorhandene Datei durch Anhängen einer der unterstützten Bilddateierweiterungen an die URL source gefunden werden kann, wird diese Datei geladen.
Bei der Dateisuche wird zunächst nach Erweiterungen für komprimierte Texturcontainer gesucht. Wenn die Suche nicht erfolgreich ist, wird versucht, mit den Dateierweiterungen für conventional image file types zu suchen. Beispiel:
// Assuming the "pics" directory contains the following files: // dog.jpg // cat.png // cat.pkm Image { source: "pics/cat.png" // loads cat.png } Image { source: "pics/dog" // loads dog.jpg } Image { source: "pics/cat" // normally loads cat.pkm, but if no OpenGL, loads cat.png instead. }
Diese Funktion erleichtert die Bereitstellung verschiedener Image-Asset-Dateitypen auf verschiedenen Zielplattformen. Dies kann nützlich sein, um die Anwendungsleistung zu optimieren und an unterschiedliche Grafikhardware anzupassen.
Diese Funktionalität wurde in Qt 5.11 eingeführt.
Leistung
Standardmäßig werden lokal verfügbare Bilder sofort geladen, und die Benutzeroberfläche wird blockiert, bis das Laden abgeschlossen ist. Wenn ein großes Bild geladen werden soll, kann es besser sein, das Bild in einem Thread mit niedriger Priorität zu laden, indem die Eigenschaft asynchronous aktiviert wird.
Wenn das Bild nicht von einer lokalen Ressource, sondern aus dem Netz bezogen wird, wird es automatisch asynchron geladen, und die Eigenschaften progress und status werden entsprechend aktualisiert.
Bilder werden intern zwischengespeichert und gemeinsam genutzt. Wenn also mehrere Bildelemente die gleiche source haben, wird nur eine Kopie des Bildes geladen.
Hinweis: Bilder sind in QML-Benutzeroberflächen oft die größten Speicherverbraucher. Es wird empfohlen, die Größe von Bildern, die nicht Teil der Benutzeroberfläche sind, über die Eigenschaft sourceSize zu begrenzen. Dies ist besonders wichtig für Inhalte, die aus externen Quellen geladen oder vom Benutzer bereitgestellt werden.
Siehe auch Qt Quick Beispiele - Bildelemente, QQuickImageProvider, und QImageReader::setAutoDetectImageFormat().
Dokumentation der Eigenschaft
Diese Eigenschaften geben die Größe des Bildes an, das tatsächlich gezeichnet wird. In den meisten Fällen entspricht sie width
und height
, aber bei Verwendung von Image.PreserveAspectFit oder Image.PreserveAspectCrop können paintedWidth
oder paintedHeight
kleiner oder größer sein als width
und height
des Elements Bild.
horizontalAlignment : enumeration |
verticalAlignment : enumeration |
Legt die horizontale und vertikale Ausrichtung des Bildes fest. Standardmäßig ist das Bild mittig ausgerichtet.
Die gültigen Werte für horizontalAlignment
sind Image.AlignLeft
, Image.AlignRight
und Image.AlignHCenter
. Die gültigen Werte für verticalAlignment
sind Image.AlignTop
, Image.AlignBottom
und Image.AlignVCenter
.
currentFrame ist der aktuell sichtbare Frame. Die Standardeinstellung ist 0
. Sie können den Wert auf eine Zahl zwischen 0
und frameCount - 1
setzen, um einen anderen Rahmen anzuzeigen, wenn das Bild mehrere Rahmen enthält.
frameCount ist die Anzahl der Bilder im Bild. Die meisten Bilder haben nur ein Bild.
asynchronous : bool |
Gibt an, dass Bilder auf dem lokalen Dateisystem asynchron in einem separaten Thread geladen werden sollen. Der Standardwert ist false, wodurch der Thread der Benutzeroberfläche blockiert wird, während das Bild geladen wird. Die Einstellung asynchronous auf true ist nützlich, wenn die Aufrechterhaltung einer reaktionsfähigen Benutzeroberfläche wünschenswerter ist als die sofortige Sichtbarkeit von Bildern.
Beachten Sie, dass diese Eigenschaft nur für Bilder gilt, die aus dem lokalen Dateisystem gelesen werden. Bilder, die über eine Netzwerkressource (z. B. HTTP) geladen werden, werden immer asynchron geladen.
autoTransform : bool |
Diese Eigenschaft legt fest, ob das Bild automatisch Bildtransformations-Metadaten wie die EXIF-Ausrichtung anwenden soll.
Standardmäßig ist diese Eigenschaft auf false gesetzt.
cache : bool |
Gibt an, ob das Bild zwischengespeichert werden soll. Der Standardwert ist true. Die Einstellung cache auf false ist nützlich, wenn es sich um große Bilder handelt, um sicherzustellen, dass diese nicht auf Kosten von kleinen "UI-Element"-Bildern zwischengespeichert werden.
fillMode : enumeration |
Setzen Sie diese Eigenschaft, um festzulegen, was passiert, wenn das Quellbild eine andere Größe als das Element hat.
Konstante | Beschreibung |
---|---|
Image.Stretch | das Bild wird skaliert, damit es passt |
Image.PreserveAspectFit | das Bild wird einheitlich skaliert, damit es ohne Beschneidung passt |
Image.PreserveAspectCrop | das Bild wird einheitlich skaliert, um es auszufüllen, gegebenenfalls mit Beschneidung |
Image.Tile | Das Bild wird horizontal und vertikal dupliziert. |
Image.TileVertically | das Bild wird horizontal gestreckt und vertikal gekachelt |
Image.TileHorizontally | das Bild wird vertikal gestreckt und horizontal gekachelt |
Image.Pad | Das Bild wird nicht transformiert |
Strecken (Standard)Image { width: 130; height: 100 source: "qtlogo.png" } | |
PreserveAspectFitImage { width: 130; height: 100 fillMode: Image.PreserveAspectFit source: "qtlogo.png" } | |
PreserveAspectCropImage { width: 130; height: 100 fillMode: Image.PreserveAspectCrop source: "qtlogo.png" clip: true } | |
KachelImage { width: 120; height: 120 fillMode: Image.Tile horizontalAlignment: Image.AlignLeft verticalAlignment: Image.AlignTop source: "qtlogo.png" } | |
TileVerticalImage { width: 120; height: 120 fillMode: Image.TileVertically verticalAlignment: Image.AlignTop source: "qtlogo.png" } | |
KachelnHorizontalImage { width: 120; height: 120 fillMode: Image.TileHorizontally verticalAlignment: Image.AlignLeft source: "qtlogo.png" } |
Beachten Sie, dass clip
standardmäßig false
ist, was bedeutet, dass das Element möglicherweise außerhalb seines begrenzenden Rechtecks gemalt wird, selbst wenn der Füllmodus auf PreserveAspectCrop
eingestellt ist.
Siehe auch Qt Quick Beispiele - Bildelemente.
mipmap : bool |
Diese Eigenschaft gibt an, ob das Bild beim Skalieren oder Transformieren Mipmap-Filterung verwendet.
Die Mipmap-Filterung bietet eine bessere visuelle Qualität bei der Verkleinerung im Vergleich zur Glättung, kann aber zu Leistungseinbußen führen (sowohl beim Initialisieren des Bildes als auch beim Rendern).
Standardmäßig ist diese Eigenschaft auf false gesetzt.
Siehe auch smooth.
mirror : bool |
Diese Eigenschaft legt fest, ob das Bild horizontal invertiert werden soll (wodurch ein gespiegeltes Bild angezeigt wird).
Der Standardwert ist false.
mirrorVertically : bool |
Diese Eigenschaft legt fest, ob das Bild vertikal invertiert werden soll (d. h., ob ein gespiegeltes Bild angezeigt werden soll).
Der Standardwert ist false.
Diese Eigenschaft wurde in Qt 6.2 eingeführt.
progress : real |
Diese Eigenschaft zeigt den Fortschritt beim Laden des Bildes an, von 0.0 (nichts geladen) bis 1.0 (fertig).
Siehe auch status.
retainWhileLoading : bool |
Diese Eigenschaft definiert das Verhalten, wenn die source Eigenschaft geändert wird und das Laden asynchron erfolgt. Dies ist der Fall, wenn die Eigenschaft asynchronous auf true
gesetzt ist oder wenn sich das Bild nicht im lokalen Dateisystem befindet.
Wenn retainWhileLoading
auf false
gesetzt ist (Standardeinstellung), wird das alte Bild sofort verworfen und die Komponente wird gelöscht, während das neue Bild geladen wird. Wenn true
eingestellt ist, wird das alte Bild beibehalten und bleibt sichtbar, bis das neue Bild fertig ist.
Die Aktivierung dieser Eigenschaft kann ein Flackern vermeiden, wenn das Laden des neuen Bildes lange dauert. Der Preis dafür ist ein gewisser zusätzlicher Speicherbedarf für die doppelte Pufferung, während das neue Bild geladen wird.
Diese Eigenschaft wurde in Qt 6.8 eingeführt.
smooth : bool |
Diese Eigenschaft legt fest, ob das Bild beim Skalieren oder Transformieren weich gefiltert wird. Glattes Filtern ergibt eine bessere visuelle Qualität, kann aber auf mancher Hardware langsamer sein. Wenn das Bild in seiner natürlichen Größe angezeigt wird, hat diese Eigenschaft keinen Einfluss auf die Darstellung oder die Leistung.
Standardmäßig ist diese Eigenschaft auf true gesetzt.
Siehe auch mipmap.
source : url |
Image kann jedes von Qt unterstützte Bildformat verarbeiten, das von jedem von Qt unterstützten URL-Schema geladen wird.
Die URL kann absolut oder relativ zur URL der Komponente sein.
Siehe auch QQuickImageProvider, Compressed Texture Files, und Automatic Detection of File Extension.
sourceClipRect : rect |
Diese Eigenschaft enthält, wenn sie gesetzt ist, den rechteckigen Bereich des zu ladenden Quellbildes.
Die Eigenschaft sourceClipRect
arbeitet mit der Eigenschaft sourceSize zusammen, um Systemressourcen zu schonen, wenn nur ein Teil eines Bildes geladen werden muss.
Rectangle { width: ... height: ... Image { anchors.fill: parent source: "reallyBigImage.svg" sourceSize.width: 1024 sourceSize.height: 1024 sourceClipRect: Qt.rect(100, 100, 512, 512) } }
Im obigen Beispiel wird die SVG-Grafik zunächst konzeptionell auf 1024x1024 skaliert und dann ein Bereich von Interesse mit 512x512 Pixeln an einer Stelle 100 Pixel vom oberen und linken Rand entfernt ausgeschnitten. So bestimmt sourceSize
die Skalierung, aber das tatsächliche Ausgabebild ist 512x512 Pixel groß.
Einige Bildformate sind in der Lage, CPU-Zeit zu sparen, indem sie nur den angegebenen Bereich rendern. Andere müssen zuerst das gesamte Bild laden und es dann auf den angegebenen Bereich beschneiden.
Diese Eigenschaft kann deaktiviert werden, um das gesamte Bild neu zu laden, indem sourceClipRect
auf undefined
gesetzt wird.
Hinweis: Das dynamische Ändern dieser Eigenschaft führt dazu, dass die Bildquelle neu geladen wird, möglicherweise sogar aus dem Netzwerk, wenn sie sich nicht im Festplatten-Cache befindet.
Hinweis: Subpixel-Clipping wird nicht unterstützt: Das angegebene Rechteck wird an QImageReader::setScaledClipRect() übergeben.
sourceSize : size |
Diese Eigenschaft enthält die skalierte Breite und Höhe des Vollbildes.
Im Gegensatz zu den Eigenschaften width und height, die das Bild skalieren, legt diese Eigenschaft die maximale Anzahl von Pixeln fest, die für das geladene Bild gespeichert werden, damit große Bilder nicht mehr Speicher als nötig verbrauchen. So wird beispielsweise sichergestellt, dass das Bild im Speicher nicht größer als 1024x1024 Pixel ist, unabhängig von den Werten width und height des Bildes:
Rectangle { width: ... height: ... Image { anchors.fill: parent source: "reallyBigImage.jpg" sourceSize.width: 1024 sourceSize.height: 1024 } }
Wenn die tatsächliche Größe des Bildes größer ist als die sourceSize, wird das Bild verkleinert. Wenn nur eine Dimension der Größe größer als 0 ist, wird die andere Dimension proportional gesetzt, um das Seitenverhältnis des Quellbildes zu erhalten. (Die fillMode ist davon unabhängig.)
Wenn sowohl sourceSize.width als auch sourceSize.height gesetzt sind, wird das Bild so verkleinert, dass es in die angegebene Größe passt (es sei denn, PreserveAspectCrop oder PreserveAspectFit werden verwendet, dann wird es so skaliert, dass es der optimalen Größe für das Zuschneiden/Einpassen entspricht), wobei das Seitenverhältnis des Bildes erhalten bleibt. Die tatsächliche Größe des Bildes nach der Skalierung ist über Item::implicitWidth und Item::implicitHeight verfügbar.
Handelt es sich bei der Quelle um ein intrinsisch skalierbares Bild (z. B. SVG), bestimmt diese Eigenschaft die Größe des geladenen Bildes unabhängig von der intrinsischen Größe. Vermeiden Sie es, diese Eigenschaft dynamisch zu ändern; das Rendern eines SVG ist im Vergleich zu einem Bild langsam.
Handelt es sich bei der Quelle um ein nicht skalierbares Bild (z. B. JPEG), wird das geladene Bild nicht größer sein, als diese Eigenschaft angibt. Bei einigen Formaten (derzeit nur JPEG) wird nie das gesamte Bild in den Speicher geladen.
Wenn die Eigenschaft sourceClipRect ebenfalls gesetzt ist, bestimmt sourceSize
die Skalierung, aber das Bild wird auf die Größe des Clip-Rechtecks beschnitten.
sourceSize kann auf die natürliche Größe des Bildes zurückgesetzt werden, indem sourceSize auf undefined
gesetzt wird.
Hinweis: Wenn diese Eigenschaft dynamisch geändert wird, muss die Bildquelle neu geladen werden, möglicherweise sogar aus dem Netzwerk, wenn sie sich nicht im Festplatten-Cache befindet.
Siehe auch Qt Quick Beispiele - Pointer Handler.
status : enumeration |
Diese Eigenschaft enthält den Status des Bildladens. Sie kann eine der folgenden sein:
Konstante | Beschreibung |
---|---|
Image.Null | Es wurde kein Bild gesetzt |
Image.Ready | Das Bild wurde bereits geladen |
Image.Loading | Das Bild wird gerade geladen |
Image.Error | Beim Laden des Bildes ist ein Fehler aufgetreten |
Verwenden Sie diesen Status, um eine Aktualisierung vorzunehmen oder auf die Statusänderung in irgendeiner Weise zu reagieren. Zum Beispiel könnten Sie:
- Eine Statusänderung auslösen:
State { name: 'loaded'; when: image.status == Image.Ready }
- Implementieren Sie einen
onStatusChanged
Signalhandler:Image { id: image onStatusChanged: if (image.status == Image.Ready) console.log('Loaded') }
- Bindung an den Statuswert:
Text { text: image.status == Image.Ready ? 'Loaded' : 'Not loaded' }
Siehe auch progress.
© 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.