QPluginLoader Class

Die Klasse QPluginLoader lädt ein Plugin zur Laufzeit. Mehr...

Kopfzeile: #include <QPluginLoader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Vererbt: QObject

Hinweis: Alle Funktionen in dieser Klasse sind reentrant.

Eigenschaften

Öffentliche Funktionen

QPluginLoader(QObject *parent = nullptr)
QPluginLoader(const QString &fileName, QObject *parent = nullptr)
virtual ~QPluginLoader()
QString errorString() const
QString fileName() const
QObject *instance()
bool isLoaded() const
bool load()
QLibrary::LoadHints loadHints() const
QJsonObject metaData() const
void setFileName(const QString &fileName)
void setLoadHints(QLibrary::LoadHints loadHints)
bool unload()

Statische öffentliche Mitglieder

QObjectList staticInstances()
QList<QStaticPlugin> staticPlugins()
void qRegisterStaticPluginFunction(QStaticPlugin plugin)

Detaillierte Beschreibung

QPluginLoader ermöglicht den Zugriff auf ein Qt-Plugin. Ein Qt-Plugin ist in einer gemeinsam genutzten Bibliothek (einer DLL) gespeichert und bietet diese Vorteile gegenüber gemeinsam genutzten Bibliotheken, auf die über QLibrary zugegriffen wird:

  • QPluginLoader prüft, ob ein Plugin mit der gleichen Version von Qt wie die Anwendung gelinkt ist.
  • QPluginLoader bietet direkten Zugriff auf ein Root-Komponentenobjekt (instance()), anstatt Sie zu zwingen, eine C-Funktion manuell aufzulösen.

Eine Instanz eines QPluginLoader-Objekts arbeitet mit einer einzelnen gemeinsam genutzten Bibliotheksdatei, die wir ein Plugin nennen. Es ermöglicht den Zugriff auf die Funktionalität des Plugins auf plattformunabhängige Weise. Um anzugeben, welches Plugin geladen werden soll, übergeben Sie entweder einen Dateinamen im Konstruktor oder legen ihn mit setFileName() fest.

Die wichtigsten Funktionen sind load(), um die Plugin-Datei dynamisch zu laden, isLoaded(), um zu prüfen, ob das Laden erfolgreich war, und instance(), um auf die Stammkomponente im Plugin zuzugreifen. Die Funktion instance() versucht implizit, das Plugin zu laden, wenn es noch nicht geladen wurde. Mehrere Instanzen von QPluginLoader können verwendet werden, um auf das gleiche physische Plugin zuzugreifen.

Einmal geladene Plugins verbleiben im Speicher, bis alle Instanzen von QPluginLoader entladen wurden, oder bis die Anwendung beendet wird. Sie können versuchen, ein Plugin mit unload() zu entladen, aber wenn andere Instanzen von QPluginLoader dieselbe Bibliothek verwenden, wird der Aufruf fehlschlagen, und das Entladen wird nur geschehen, wenn jede Instanz unload() aufgerufen hat. Unmittelbar vor dem Entladen wird auch die Wurzelkomponente gelöscht.

Siehe How to Create Qt Plugins für weitere Informationen darüber, wie man seine Anwendung durch Plugins erweiterbar macht.

Beachten Sie, dass der QPluginLoader nicht verwendet werden kann, wenn Ihre Anwendung statisch gegen Qt gelinkt ist. In diesem Fall müssen Sie Plugins ebenfalls statisch verlinken. Sie können QLibrary verwenden, wenn Sie dynamische Bibliotheken in einer statisch gelinkten Anwendung laden müssen.

Siehe auch QLibrary.

Dokumentation der Eigenschaften

fileName : QString

Diese Eigenschaft enthält den Dateinamen des Plugins

Es wird empfohlen, das Suffix der Datei im Dateinamen wegzulassen, da QPluginLoader automatisch nach der Datei mit dem entsprechenden Suffix sucht (siehe QLibrary::isLibrary()).

Beim Laden des Plugins sucht QPluginLoader in allen mit QCoreApplication::libraryPaths() angegebenen Plugin-Speicherorten, es sei denn, der Dateiname hat einen absoluten Pfad. Nach dem erfolgreichen Laden des Plugins gibt fileName() den vollqualifizierten Dateinamen des Plugins zurück, einschließlich des vollständigen Pfads zum Plugin, falls dieser im Konstruktor angegeben oder an setFileName() übergeben wurde.

Wenn der Dateiname nicht existiert, wird er nicht gesetzt. Diese Eigenschaft wird dann einen leeren String enthalten.

Standardmäßig enthält diese Eigenschaft einen leeren String.

Zugriffsfunktionen:

QString fileName() const
void setFileName(const QString &fileName)

Siehe auch load().

loadHints : QLibrary::LoadHints

Geben Sie der Funktion load() einige Hinweise, wie sie sich verhalten soll.

Sie können Hinweise darauf geben, wie die Symbole im Plugin aufgelöst werden. Standardmäßig ist seit Qt 5.7, QLibrary::PreventUnloadHint gesetzt.

Siehe die Dokumentation von QLibrary::loadHints für eine vollständige Beschreibung der Funktionsweise dieser Eigenschaft.

Zugriffsfunktionen:

QLibrary::LoadHints loadHints() const
void setLoadHints(QLibrary::LoadHints loadHints)

Siehe auch QLibrary::loadHints.

Dokumentation der Mitgliedsfunktionen

[explicit] QPluginLoader::QPluginLoader(QObject *parent = nullptr)

Konstruiert einen Plugin-Loader mit der angegebenen parent.

[explicit] QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = nullptr)

Konstruiert einen Plugin-Loader mit der angegebenen parent, der das durch fileName angegebene Plugin lädt.

Um ladbar zu sein, muss das Suffix der Datei ein gültiges Suffix für eine ladbare Bibliothek in Übereinstimmung mit der Plattform sein, z. B. .so auf Unix, - .dylib auf macOS und iOS und .dll auf Windows. Das Suffix kann mit QLibrary::isLibrary() überprüft werden.

Siehe auch setFileName().

[virtual noexcept] QPluginLoader::~QPluginLoader()

Zerstört das Objekt QPluginLoader.

Sofern unload() nicht explizit aufgerufen wurde, bleibt das Plugin im Speicher, bis die Anwendung beendet wird.

Siehe auch isLoaded() und unload().

QString QPluginLoader::errorString() const

Gibt eine Zeichenkette mit der Beschreibung des letzten aufgetretenen Fehlers zurück.

QObject *QPluginLoader::instance()

Gibt das Stammkomponentenobjekt des Plugins zurück. Das Plugin wird geladen, falls erforderlich. Die Funktion gibt nullptr zurück, wenn das Plugin nicht geladen werden konnte oder das Stammkomponentenobjekt nicht instanziiert werden konnte.

Wurde das Root-Component-Objekt zerstört, wird durch den Aufruf dieser Funktion eine neue Instanz erzeugt.

Die Wurzelkomponente, die von dieser Funktion zurückgegeben wird, wird nicht gelöscht, wenn die QPluginLoader zerstört wird. Wenn Sie sicherstellen wollen, dass die Wurzelkomponente gelöscht wird, sollten Sie unload() aufrufen, sobald Sie keinen Zugriff mehr auf die Kernkomponente benötigen. Wenn die Bibliothek schließlich entladen wird, wird die Wurzelkomponente automatisch gelöscht.

Das Komponentenobjekt ist eine QObject. Verwenden Sie qobject_cast(), um auf die Schnittstellen zuzugreifen, an denen Sie interessiert sind.

Siehe auch load().

bool QPluginLoader::isLoaded() const

Gibt true zurück, wenn das Plugin geladen ist; andernfalls false.

Siehe auch load().

bool QPluginLoader::load()

Lädt das Plugin und gibt true zurück, wenn das Plugin erfolgreich geladen wurde; andernfalls wird false zurückgegeben. Da instance() diese Funktion immer aufruft, bevor irgendwelche Symbole aufgelöst werden, ist es nicht notwendig, sie explizit aufzurufen. In manchen Situationen möchten Sie vielleicht, dass das Plugin im Voraus geladen wird; in diesem Fall würden Sie diese Funktion verwenden.

Siehe auch unload().

QJsonObject QPluginLoader::metaData() const

Gibt die Metadaten für dieses Plugin zurück. Bei den Metadaten handelt es sich um Daten, die beim Kompilieren des Plugins mit dem Makro Q_PLUGIN_METADATA() im json-Format angegeben wurden.

Die Metadaten können auf schnelle und kostengünstige Weise abgefragt werden, ohne das Plugin zu laden. Damit ist es möglich, z.B. Fähigkeiten des Plugins darin zu speichern und die Entscheidung, ob das Plugin geladen werden soll, von diesen Metadaten abhängig zu machen.

[static] QObjectList QPluginLoader::staticInstances()

Gibt eine Liste der statischen Plugin-Instanzen (Wurzelkomponenten) zurück, die vom Plugin-Loader gehalten werden.

Siehe auch staticPlugins().

[static] QList<QStaticPlugin> QPluginLoader::staticPlugins()

Gibt eine Liste von QStaticPlugins zurück, die vom Plugin-Loader gehalten werden. Die Funktion ist ähnlich wie staticInstances() mit dem Zusatz, dass QStaticPlugin auch Metadateninformationen enthält.

Siehe auch staticInstances().

bool QPluginLoader::unload()

Entlädt das Plugin und gibt true zurück, wenn das Plugin entladen werden konnte; andernfalls wird false zurückgegeben.

Dies geschieht automatisch beim Beenden der Anwendung, so dass Sie diese Funktion normalerweise nicht aufrufen müssen.

Wenn andere Instanzen von QPluginLoader dasselbe Plugin verwenden, schlägt der Aufruf fehl, und das Entladen erfolgt erst, wenn jede Instanz unload() aufgerufen hat.

Versuchen Sie nicht, die Stammkomponente zu löschen. Verlassen Sie sich stattdessen darauf, dass unload() sie bei Bedarf automatisch löscht.

Siehe auch instance() und load().

Verwandte Nicht-Mitglieder

void qRegisterStaticPluginFunction(QStaticPlugin plugin)

Registriert die beim Plugin-Loader angegebene plugin und wird von Q_IMPORT_PLUGIN() verwendet.

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