Upravitelj akcija i naredbe
Qt Creator osigurava središnji dijalog postavki za upravljanje prečacima za radnje u Edit > Preferences > Environment > Keyboard. Proširenja i dodaci 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 proslijediti različitim dodacima 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 na tipkovnici.
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 poziva jedinstvenim ID-om. Dodaci koriste ID prilikom registracije 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 naredba prikazuje.
Po zadanom, dijalog postavki prikazuje tekst trenutno aktivne QAction, uz ID. Ako to nije prikladno, možete postaviti drugačiji prikazani tekst 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 u koji registrirate pomoću Core::ActionManager::registerAction() nikada se ne koristi, stoga ga nemojte postavljati.
Core::Command::action() vraća akciju koja se treba koristiti za korisničko sučelje i interakciju s korisnikom. Dodajte je u izbornike i gumbe alata. Nikada ne biste izravno na ovom QAction -u trebali postavljati svojstva poput stanja omogućenosti ili vidljivosti. Time upravlja upravitelj akcija i ono odražava stanje trenutno aktivnog QAction -a u nekom dodatku.
QAction koji ste registrirali u upravitelju akcija služi vašim internim svrhama. 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. Radi performansi, tekst akcije, pomoćni natpis i ikona se prema zadanim postavkama ne ažuriraju. One se samo kopiraju iz prvog QAction registriranog za naredbu. Postavite odgovarajući Core::Command::CommandAttribute ako trebate dinamička ažuriranja tih svojstava.
Konteksti
Kada se dodatci registriraju za QAction za naredbu, moraju navesti Core::Context. Koja je od registriranih QAction za naredbu trenutno aktivna određuje se putem poredanog popisa trenutačnih konteksta.
Konteksti se prikupljaju iz više izvora:
- Globalni kontekst. To je kontekst koji je uvijek aktivan, s najnižim prioritetom.
- QWidget Fokus aplikacije. Instance konteksta mogu se povezati s kontekstom putem Core::IContext. Svi konteksti iz trenutnog fokusiranog widgeta sve do vrha hijerarhije widgeta dodaju se trenutnom kontekstu.
- Ručno upravljani konteksti. Konteksti se mogu ručno dodati i ukloniti 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(). Odaberite 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 (određeno kontekstom Core::Constants::C_GLOBAL) i dodjeljuje joj prečac na tipkovnici Ctrl+Alt+Meta+A. QAction *action koji je registriran za globalni kontekst za akciju u vlasništvu je dodatka. Povežite se na signal aktivacije ovog QAction-a i upravljajte stanjem akcije pozivanjem odgovarajućih metoda na ovom QAction objektu.
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.