ExtensionSystem::PluginManager Class
class ExtensionSystem::PluginManagerKlasa 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
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) |
| 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) |
| 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 je moguće 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 promijeni stanje spremnika objekata, upravitelj dodataka emitira odgovarajući signal.
Uobičajena primjena predmetnog bazena 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 predmetni bazen. Dodatak koji pruža točku proširenja traži implementacije klase ili sučelja u predmetnom bazenu.
// 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>();
Predložak klase ExtensionSystem::Invoker pruža sintaktički šećer za korištenje mekih točaka proširenja koje objekt u poolu 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 poolu.
Predložak funkcije ExtensionSystem::invoke() enkapsulira konstrukciju klase ExtensionSystem::Invoker za uobičajeni slučaj kada se ne provjerava uspjeh poziva.
// 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); // Zabilježite uspješan poziv 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 odsutnošću dodatka A. } };
Napomena: Tip parametara koji se prosljeđuju pozivima invoke() -a 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 upravitelj dodataka. Treba 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 prema vrsti.
Upravitelj dodataka ne upravlja memorijom. Dodani objekti moraju se ručno ukloniti iz bazena i obrisati od strane osobe odgovorne 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 dodaci biti omogućeni ili onemogućeni (ovisno o enable 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 zadane vrste 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)
predicateVraća objekt zadanog tipa iz bazena objekata koji odgovara predikatu o objektima.
Ova funkcija koristi qobject_cast za određivanje tipa 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] bool PluginManager::hasError()
Vraća true ako bilo koji dodatak ima pogreške iako 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 opcijskog niza i boolean varijable 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 pronađene opcije aplikacije. 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 valjani dodaci moraju imati.
Vidi također setPluginIID().
[static] Utils::FilePaths PluginManager::pluginPaths()
Popis putova su oni na 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-inovima zajedno s argumentima.
socket se prosljeđuje za prekid veze s partnerom 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)
iidPostavlja IID koji valjani dodatci moraju imati da bi bili učitani. 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 pretražuju se dodaci.
Vidi također pluginPaths() i loadPlugins().
[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.