Na ovoj stranici

ExtensionSystem::PluginManager Class

class ExtensionSystem::PluginManager

Klasa PluginManager implementira osnovni sustav dodataka koji upravlja dodacima, njihovim životnim ciklusom i njihovim registriranim objektima. Više...

Header: #include <extensionsystem/pluginmanager.h>
Inherits: QObject
Javne funkcije

Javne funkcije

Statični javni članovi

Statični javni članovi

void addObject(QObject *obj)
QObjectList allObjects()
QStringList arguments()
QStringList argumentsForRestart()
std::optional<QSet<ExtensionSystem::PluginSpec *>> askForEnablingPlugins(QWidget *dialogParent, const QSet<ExtensionSystem::PluginSpec *> &plugins, bool enable)
void formatOptions(QTextStream &str, int optionIndentation, int descriptionIndentation)
void formatPluginOptions(QTextStream &str, int optionIndentation, int descriptionIndentation)
void formatPluginVersions(QTextStream &str)
T *getObject()
T *getObject(Predicate predicate)
QObject *getObjectByName(const QString &name)
Utils::QtcSettings *globalSettings()
bool hasError()
ExtensionSystem::PluginManager *instance()
void loadPlugins()
QList<ExtensionSystem::PluginSpec *> loadQueue()
Utils::Result<> parseOptions(const QStringList &args, const QMap<QString, bool> &appOptions, QMap<QString, QString> *foundAppOptions)
QString pluginIID()
Utils::FilePaths pluginPaths()
const QList<ExtensionSystem::PluginSpec *> plugins()
const QSet<ExtensionSystem::PluginSpec *> pluginsRequiringPlugin(ExtensionSystem::PluginSpec *spec)
const QSet<ExtensionSystem::PluginSpec *> pluginsToEnableForPlugin(ExtensionSystem::PluginSpec *spec)
void remoteArguments(const QString &serializedArgument, QObject *socket)
void removeObject(QObject *obj)
QString serializedArguments()
void setPluginIID(const QString &iid)
void setPluginPaths(const Utils::FilePaths &paths)
Utils::QtcSettings *settings()
void shutdown()
ExtensionSystem::PluginSpec *specForPlugin(ExtensionSystem::IPlugin *plugin)

Detaljan opis

Upravitelj dodataka koristi se za sljedeće zadatke:

  • Upravljanje dodatcima i njihovim stanjem
  • Manipulirati zajedničkim bazenom objekata

Dodaci

Dodaci moraju nasljeđivati od klase IPlugin i imati IID "org.qt-project.Qt.QtCreatorPlugin".

Upravitelj dodataka služi za postavljanje popisa direktorija datotečnog sustava za pretraživanje dodataka, dohvaćanje informacija o stanju tih dodataka i njihovo učitavanje.

Obično aplikacija stvara instancu upravitelja dodataka i pokreće učitavanje.

// 'plugins' and subdirs will be searched for plugins
PluginManager::setPluginPaths(QStringList("plugins"));
PluginManager::loadPlugins(); // try to load all the plugins

Dodatno, moguće je izravno pristupiti metapodacima dodatka, instancama i stanju.

Fond objekata

Plugini (i svi ostali) mogu dodavati objekte u zajednički bazen koji se nalazi u upravitelju dodataka. Objekti u bazenu moraju nasljeđivati od QObject, nema drugih preduvjeta. Objekti se mogu dohvatiti iz baze objekata putem funkcija getObject() i getObjectByName().

Kad god se stanje repozitorija objekata promijeni, upravitelj dodataka emitira odgovarajući signal.

Kad god se promijeni stanje fonda objekata, upravitelj dodataka emitira odgovarajući signal.

Uobičajena primjena objektnog bazena jest da dodatak (ili aplikacija) pruži točku proširenja za drug

Uobičajena primjena objekta za upravljanje objektima jest da dodatak (ili aplikacija) pruži točku proširenja za druge dodatke, koja je klasa ili sučelje koje se može implementirati i dodati u objekt za upravljanje objektima. Dodatak koji pruža točku proširenja traži implementacije klase ili sučelja u objektu za upravljanje objektima.

// Plugin A provides a "MimeTypeHandler" extension point
// in plugin B:
MyMimeTypeHandler *handler = new MyMimeTypeHandler();
PluginManager::instance()->addObject(handler);
// In plugin A:
MimeTypeHandler *mimeHandler =
    PluginManager::getObject<MimeTypeHandler>();
Šablonska klasa ExtensionSystem::Invoker pruža sintaktički šećer za korištenje mekih točaka proširen

Predložak klase ExtensionSystem::Invoker pruža sintaktički šećer za korištenje mekih točaka proširenja koje objekt u spremniku može, ali i ne mora, pružiti. Ovaj pristup ne zahtijeva da korisnički dodatak bude povezan s dodatkom pružatelja niti zajedničku glavu datoteke. Izloženi sučelje implicitno je definirano pozivnim funkcijama objekta pružatelja u spremniku objekata.

Predložak funkcije ExtensionSystem::invoke() enkapsulira konstrukciju objekta ExtensionSystem::Invoker za uobičajeni slučaj kada se ne provjerava uspješnost poziva.

// U dodatku "provide" A: namespace PluginA { class SomeProvider : public SomeProvider { public:
// U dodatku "provide" A:
namespace PluginA {
class SomeProvider : public QObject
{
    Q_OBJECT

public:
    Q_INVOKABLE QString doit(const QString&msg, int n) {
    {
        qDebug() << "I AM DOING IT " << msg;
       vratiti QString::number(n);
    }
};
} // namespace PluginA


// U dodatku "user" B:
int someFuntionUsingPluginA()
{
    using namespace ExtensionSystem;

    QObject*target = PluginManager::getObjectByClassName("PluginA::SomeProvider");

    if (target) {
        // Neki nasumični argument.
        QString msg = "ZAISTA.";

        // Običan poziv funkcije, bez povratne vrijednosti.
        invoke<void>(target, "doit", msg, 2);

        // Obična funkcija bez povratne vrijednosti.
        qDebug() << "Result: " << invoke<QString>(target, "doit", msg, 21);

       // Zapis uspješnog poziva funkcije s povratnom vrijednošću.
        Invoker<QString> in1(target, "doit", msg, 21);
        qDebug() << "Success: (expected)" << in1.wasSuccessful();

       // Pokušaj pozvati nepostojeću funkciju.
        Invoker<QString> in2(target, "doitWrong", msg, 22);
        qDebug() << "Success (not expected):" << in2.wasSuccessful();

    } else {

        // Moramo se nositi s nedostatkom dodatka A.
    }
};

Napomena: Tip parametara koji se prosljeđuju pozivima invoke() deducira se iz samih parametara i mora se točno podudarati s tipom argumenata pozvanih funkcija. Ni konverzija ni čak promaknuti tipovi (integer promotions) nisu dopušteni, stoga da biste eksplicitno pozvali funkciju s parametrom long, upotrijebite long(43) ili slično.

Napomena: Funkcije za upravljanje bazenom objekata su sigurna za više niti.

Dokumentacija članovskih funkcija

PluginManager::PluginManager()

Stvara upravljač dodataka. Trebalo bi se izvršiti samo jednom po aplikaciji.

[static] void PluginManager::addObject(QObject *obj)

Dodaje objekt obj u bazen objekata, tako da se može ponovno dohvatiti iz baze po vrsti.

Upravitelj dodataka ne upravlja memorijom. Dodani objekti moraju se ručno ukloniti iz bazena i obrisati od strane onoga tko je odgovoran za objekt.

Emitira signal objectAdded().

Vidi također PluginManager::removeObject(), PluginManager::getObject() i PluginManager::getObjectByName().

[static] QObjectList PluginManager::allObjects()

Vraća popis svih objekata u poolu, nefiltriran.

Obično klijenti ne moraju pozivati ovu funkciju.

Vidi također PluginManager::getObject().

[static] QStringList PluginManager::arguments()

Argumenti koji ostanu nakon parsiranja (koji nisu bili ni startup ni plugin argumenti). Obično je to popis datoteka za otvaranje.

[static] QStringList PluginManager::argumentsForRestart()

Argumenti koji se trebaju koristiti pri automatskom ponovnom pokretanju aplikacije. To uključuje opcije vezane uz upravitelj dodataka za omogućavanje ili onemogućavanje dodataka, ali isključuje ostale, poput argumenata koje vraća metoda arguments() i argumenata appOptions proslijeđenih metodi parseOptions().

[static] std::optional<QSet<ExtensionSystem::PluginSpec *>> PluginManager::askForEnablingPlugins(QWidget *dialogParent, const QSet<ExtensionSystem::PluginSpec *> &plugins, bool enable)

Prikuplja ovisnosti plugins a i pita korisnika trebaju li odgovarajući dodatci biti omogućeni ili onemogućeni (ovisno o enable u i koristeći dialogParent kao roditeljski element za dijalog).

Vraća (moguće) prazan skup dodatnih dodataka koji bi trebali biti omogućeni ili onemogućeni. Vraća std::nullopt ako je korisnik otkazao.

[static] void PluginManager::formatOptions(QTextStream &str, int optionIndentation, int descriptionIndentation)

Formatira opcije pokretanja upravitelja dodataka za pomoć u naredbenom retku sa zadanim optionIndentation i descriptionIndentation. Dodaje rezultat u str.

[static] void PluginManager::formatPluginOptions(QTextStream &str, int optionIndentation, int descriptionIndentation)

Formatira opcije dodatka u specifikacijama dodatka za pomoć na naredbenom retku sa zadanim optionIndentation i descriptionIndentation. Dodaje rezultat u str.

[static] void PluginManager::formatPluginVersions(QTextStream &str)

Formatira verziju specifikacija dodatka za pomoć na naredbenom retku i dodaje je u str.

[static] template <typename T> T *PluginManager::getObject()

Vraća objekt zadanog tipa iz bazena objekata.

Ova funkcija koristi qobject_cast kako bi odredila tip objekta. Ako u spremniku objekata postoji više objekata navedenog tipa, ova će funkcija nasumično odabrati jedan od njih.

Vidi također addObject().

[static] template <typename T, typename Predicate> T *PluginManager::getObject(Predicate predicate)

Vraća objekt zadane vrste iz bazena objekata koji odgovara predikatu predicate.

Ova funkcija koristi qobject_cast kako bi odredila tip objekta. Predikat mora biti funkcija koja prima T* i vraća bool. Ako postoji više objekata koji odgovaraju tipu i predikatu, ova funkcija će nasumično odabrati jedan od njih.

Vidi također addObject().

[static] QObject *PluginManager::getObjectByName(const QString &name)

Vraća jedan objekt pomoću name iz bazena objekata.

Vidi također addObject().

[static] Utils::QtcSettings *PluginManager::globalSettings()

Vraća globalne (neovisne o korisniku) postavke koje se koriste za informacije o zadano onemogućenim dodatcima.

[static] bool PluginManager::hasError()

Vraća true ako bilo koji dodatak ima pogreške unatoč tome što je omogućen. Najkorisnije je pozvati ga nakon loadPlugins().

[static] ExtensionSystem::PluginManager *PluginManager::instance()

Dobiva jedinstvenu instancu upravitelja dodataka.

[static] void PluginManager::loadPlugins()

Pokušava učitati sve dodatke koji su prethodno pronađeni pri postavljanju putanja za pretraživanje dodataka. Specifikacije dodataka mogu se koristiti za dohvaćanje informacija o pogreškama i stanju pojedinih dodataka.

Vidi također setPluginPaths() i plugins().

[static] QList<ExtensionSystem::PluginSpec *> PluginManager::loadQueue()

Vraća popis dodataka u redoslijedu učitavanja.

[static] Utils::Result<> PluginManager::parseOptions(const QStringList &args, const QMap<QString, bool> &appOptions, QMap<QString, QString> *foundAppOptions)

Uzimaju se opcije iz retka naredbi u args i analiziraju se. Sam upravitelj dodataka može izravno obraditi neke opcije (-noload <plugin>) i dodaje opcije koje su registrirali dodaci u njihove specifikacije dodataka.

Pozivatelj (aplikacija) može se registrirati za opcije putem popisa appOptions, koji sadrži parove niza opcije i boolean vrijednosti koja označava treba li opcija argument. Opcije aplikacije uvijek nadjačavaju opcije bilo kojeg dodatka.

foundAppOptions Postavlja se na parove (niz opcije, argument) za sve opcije aplikacije koje su pronađene. Opcije iz naredbenog retka koje nisu obrađene mogu se dohvatiti putem funkcije arguments().

Vraća ako je došlo do pogreške.

[static] QString PluginManager::pluginIID()

IID koji moraju imati valjani dodatci.

Vidi također setPluginIID().

[static] Utils::FilePaths PluginManager::pluginPaths()

Popis putanja po kojima upravitelj dodataka traži dodatke.

Vidi također setPluginPaths().

[static] const QList<ExtensionSystem::PluginSpec *> PluginManager::plugins()

Popis svih dodataka koji su pronađeni u putanjama za pretraživanje dodataka. Ovaj popis vrijedi neposredno nakon poziva setPluginPaths(). Specifikacije dodataka sadrže metapodatke o dodatku i trenutno stanje dodataka. Ako je biblioteka dodatka već uspješno učitana, specifikacija dodatka također sadrži referencu na stvorenu instancu dodatka.

Vidi također setPluginPaths().

[static] const QSet<ExtensionSystem::PluginSpec *> PluginManager::pluginsRequiringPlugin(ExtensionSystem::PluginSpec *spec)

Vraća sve dodatke koji zahtijevaju učitavanje spec. Rekurzivno prolazi kroz ovisnosti.

[static] const QSet<ExtensionSystem::PluginSpec *> PluginManager::pluginsToEnableForPlugin(ExtensionSystem::PluginSpec *spec)

Vraća sve dodatke koje spec zahtijeva da budu učitani. Rekurzivno prolazi kroz ovisnosti.

[static] void PluginManager::remoteArguments(const QString &serializedArgument, QObject *socket)

Parsira opcije kodirane u serializedArgument i prosljeđuje ih odgovarajućim plug-inima zajedno s argumentima.

socket Se prosljeđuje za prekid veze s peerom kada je operacija dovršena (na primjer, dokument je zatvoren) radi podrške zastavici -block.

[static] void PluginManager::removeObject(QObject *obj)

Emitira signal aboutToRemoveObject() i uklanja objekt obj iz bazena objekata.

Vidi također PluginManager::addObject().

[static] QString PluginManager::serializedArguments()

Serijalizira opcije i argumente dodatka za slanje u jednom nizu putem QtSingleApplication: ":myplugin|-option1|-option2|:arguments|argument1|argument2", kao popis popisa koji započinje ključnom riječi s dvotočkom. Argumenti su na kraju.

Vidi također setPluginPaths().

[static] void PluginManager::setPluginIID(const QString &iid)

Postavlja IID koji valjani dodatci moraju imati na iid. Samo se dodatci s ovim IID-om učitavaju, ostali se tiho zanemaruju.

Trenutno se ovo mora pozvati prije poziva setPluginPaths().

Vidi također pluginIID().

[static] void PluginManager::setPluginPaths(const Utils::FilePaths &paths)

Postavlja putanje do dodataka. U svim navedenim paths i njihovim poddirektorijima traže se dodaci.

Vidi također pluginPaths() i loadPlugins().

[static] Utils::QtcSettings *PluginManager::settings()

Vraća korisniku specifične postavke koje se koriste za informacije o omogućenim i onemogućenim dodatcima.

[static] void PluginManager::shutdown()

Zaustavlja i briše sve dodatke.

[static] ExtensionSystem::PluginSpec *PluginManager::specForPlugin(ExtensionSystem::IPlugin *plugin)

Vraća PluginSpec koji odgovara plugin.

Copyright © The Qt Company Ltd. and other contributors. 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.