Upravitelj akcija i naredbe
Qt Creator Omogućuje središnji dijalog postavki za upravljanje prečacima za radnje u Edit > Preferences > Environment > Keyboard. Proširenja i dodatci moraju obavijestiti Qt Creator o radnjama koje pružaju kako bi se mogle pojaviti u postavkama. Također, neke radnje, poput Edit > Undo, potrebno je raspodijeliti različitim dodatcima ovisno o kontekstu u kojem se korisnik trenutno nalazi, na primjer u uređivaču teksta ili u komponenti za dizajn korisničkog sučelja. Klase Core::ActionManager i Core::Command koriste se za upravljanje time.
Core::Command Upravitelj akcija sadrži popis instanci naredbi. Svaka naredba predstavlja unos u postavkama prečaca tipkovnice.
Zapovijed također upravlja kojom se stvarnom instancom QAction -a trenutno predstavlja, ovisno o kontekstu. Za to zapovijed ima vlastiti QAction, koji je dostupan putem Core::Command::action(), i treba ga koristiti prilikom dodavanja zapovijedi u korisnički sučelje, poput izbornika i gumba alata. Ovaj QAction delegira svoje signale triggered() i toggled() trenutno aktivnom QAction-u.

Naredba
Klasa Core::Command predstavlja radnju s prečacem koji korisnik može postaviti u postavkama i koji se, ovisno o kontekstu, može delegirati stvarnom QAction u dodatku.
Zapovijed se referira svojim jedinstvenim ID-om. Dodaci koriste ID prilikom registriranja radnje za zapovijed u određenom kontekstu pomoću metode Core::ActionManager::registerAction(). Ta metoda vraća instancu klase Core::Command koja se zatim koristi za daljnju konfiguraciju radnje. Ako je za istu naredbu (isti ID) registrirano više QAction objekata, oni moraju biti registrirani za različite kontekste. ID se također koristi za grupiranje u dijalogu postavki: sve do prve točke u ID-u koristi se kao kategorija pod kojom se prikazuje naredba.
Po zadanom, dijalog postavki prikazuje tekst trenutno aktivne QAction, uz ID. Ako to nije prikladno, možete postaviti drugi tekst za prikaz pomoću metode Core::Command::setDescription().
Koristite metodu Core::Command::setDefaultKeySequence() naredbe za postavljanje zadane sekvence tipki koja se koristi ako je korisnik ne prilagodi. Prečac na QAction koji registrirate pomoću metode Core::ActionManager::registerAction() nikada se ne koristi, stoga ga nemojte postavljati.
Core::Command::action() vraća akciju koja se treba koristiti za korisnički sučelje i interakciju s korisnikom. Dodajte je u izbornike i gumbe alata. Nikada ne biste trebali izravno postavljati svojstva poput stanja omogućenosti ili vidljivosti na ovom QAction. Time upravlja upravitelj akcija i odražava stanje trenutno aktivnog QAction u nekom dodatku.
QAction koji ste registrirali u action manageru služi za vaše interne svrhe. Koristite ga za povezivanje vaše logike s signalom QAction::triggered(), te za postavljanje stanja omogućenosti i vidljivosti. Core::Command::action() će odražavati te promjene ako je vaš QAction aktivan, ovisno o aktivnom kontekstu. Iz razloga performansi tekst akcije, alatni savjet i ikona se prema zadanim postavkama ne ažuriraju. Oni se samo kopiraju iz prve registrirane akcije ( QAction ) za naredbu. Postavite odgovarajuću Core::Command::CommandAttribute ako trebate dinamička ažuriranja tih svojstava.
Konteksti
Kada se za naredbu registriraju QAction, potrebno je navesti Core::Context. Koja je od registriranih QActions za naredbu trenutno aktivna određuje se putem poredane liste trenutačnih konteksta.
Konteksti se prikupljaju iz više izvora:
- Globalni kontekst. To je kontekst koji je uvijek aktivan, s najnižim redoslijedom prioriteta.
- QWidget Fokus aplikacije. Instance konteksta mogu se povezati s kontekstom putem Core::IContext. Svi konteksti iz trenutnog fokusiranog widgeta do vrha hijerarhije widgeta dodaju se trenutnom kontekstu.
- Ručno upravljani konteksti. Konteksti se mogu ručno dodavati i uklanjati putem ICore::updateAdditionalContexts().
Korištenje IContext
Core::IContext je zaseban objekt koji povezuje QWidget iz Core::IContext::widget() s kontekstom Core::IContext::context().
Da biste povezali widget s kontekstom, stvorite instancu objekta Core::IContext, postavite na nju widget i kontekst te je registrirajte pomoću metode Core::ICore::addContextObject(). Kad god se vaš widget nalazi u roditeljskom lancu fokusa aplikacije, aktivan će biti i kontekst koji ste naveli.
auto contextObj = new Core::IContext(this); contextObj->setWidget(myWidget); contextObj->setContext(myContext); Core::ICore::addContextObject(contextObj);
Primjerci IContext automatski se odjavljuju kada se izbrišu. Koristite Core::ICore::removeContextObject() ako trebate ručno odjaviti primjerak IContext.
Neki konstrukti u Qt Creator automatski imaju pridruženi kontekst, poput Core::IEditor i Core::IMode.
Ručno upravljanje kontekstima
Ako želite da kontekst bude aktivan ili neaktivan neovisno o fokusu aplikacije, možete ručno dodavati i uklanjati kontekste pomoću Core::ICore::updateAdditionalContexts(), Core::ICore::addAdditionalContext() i Core::ICore::removeAdditionalContext(). Preporučite Core::ICore::updateAdditionalContexts() ako trebate ukloniti i dodati kontekste kako biste izbjegli dodatno opterećenje koje nastaje uklanjanjem i dodavanjem konteksta u odvojenim pozivima.
Registracija akcija
Radije registrirajte akcije u metodi ExtensionSystem::IPlugin::initialize() vašeg dodatka. Na taj način svaki dodatak koji ovisi o vašem dodatku ima pristup tim akcijama.
namespace Constants { const char ACTION_ID[] = "Example.Action"; } // Constants bool ExamplePlugin::initialize(const QStringList &arguments, QString *errorString) { // some other setup ... QAction *action = new QAction(tr("Example Action"), this); Core::Command *cmd = Core::ActionManager::registerAction(action, Constants::ACTION_ID, Core::Context(Core::Constants::C_GLOBAL)); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Meta+A"))); connect(action, &QAction::triggered, this, [this] { // do something }); // more setup ... return true; }
Ovaj isječak koda postavlja primjer akcije s ID-om ACTION_ID koja je uvijek aktivna (navedeno kontekstom Core::Constants::C_GLOBAL) i dodjeljuje joj prečac na tipkovnici Ctrl+Alt+Meta+A. Događaj QAction *action koji je registriran za globalni kontekst za akciju pripada dodatku. Povežite se s okidačkim signalom ovog QAction-a i upravljajte stanjem akcije pozivanjem odgovarajućih metoda na ovom primjerku QAction.
Sažetak
- Koristite Core::ActionManager::registerAction() za registraciju vlastitog QAction za naredbu s navedenim ID-om.
- Ako je više QActiona registrirano za istu naredbu, moraju biti registrirani za različite kontekste.
- Koristite Core::Command::setDefaultKeySequence(), ne koristite QAction::setShortcut().
- Koristite Core::Command::action() za korisničke svrhe, kao što su izbornici i gumbi alata.
- Koristite vlastiti QAction za postavljanje svojstava poput teksta i ikone te za povezivanje logike vaše aplikacije.
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.