Core::ProgressManager Class
class Core::ProgressManagerQt CreatorKlasa ProgressManager koristi se za prikaz korisničkog sučelja za pokretanje zadataka u okruženju .NET Frameworka. Više...
| Header: | #include <coreplugin/progressmanager/progressmanager.h> |
| Inherits: | QObject |
Javne vrste
| enum | ProgressFlag { KeepOnFinish, ShowInApplicationIcon } |
| flags | ProgressFlags |
Javni slotovi
| void | cancelTasks(Utils::Id type) |
Signali
| void | allTasksFinished(Utils::Id type) |
| void | taskStarted(Utils::Id type) |
Statični javni članovi
| Core::FutureProgress * | addTask(const QFuture<void> &future, const QString &title, Utils::Id type, Core::ProgressManager::ProgressFlags flags = {}) |
| Core::FutureProgress * | addTimedTask(const QFutureInterface<void> &futureInterface, const QString &title, Utils::Id type, std::chrono::seconds expectedDuration, Core::ProgressManager::ProgressFlags flags = {}) |
| Core::ProgressManager * | instance() |
| void | setApplicationLabel(const QString &text) |
Detaljan opis
Upravitelj napretka prati napredak zadatka o kojemu je obaviješten i prikazuje indikator napretka korisniku u donjem desnom kutu glavnog prozora Qt Creator-a. Indikator napretka također omogućuje korisniku otkazivanje zadatka.
Jedinstveni primjerak ove klase dobivate putem funkcije ProgressManager::instance().
Registracija zadatka
API klase ProgressManager koristi QtConcurrent kao osnovu za definiranje zadataka. Zadatak se sastoji od sljedećih svojstava:
| Svojstvo | Tip | Opis |
|---|---|---|
| Apstrakcija zadatka | QFuture<void> | QFuture objekt koji predstavlja zadatak i odgovoran je za izvještavanje o njegovom stanju. Pogledajte u nastavku kodne obrasce kako stvoriti ovaj objekt za vaš specifični zadatak. |
| Naslov | QString | Vrlo kratak naslov koji opisuje vaš zadatak. Prikazuje se kao naslov iznad trake napretka. |
| Tip | QString | Identifikator niza koji se koristi za grupiranje različitih zadataka koji pripadaju zajedno. Na primjer, sve operacije pretraživanja koriste isti identifikator tipa. |
| Zastavice | ProgressManager::ProgressFlags | Dodatne zastavice koje specificiraju kako se traka napretka treba prikazati korisniku. |
Da biste registrirali zadatak, stvorite svoj objekt QFuture<void> i pozovite addTask(). Ova funkcija vraća objekt FutureProgress koji možete koristiti za daljnju prilagodbu izgleda trake napretka. Pogledajte dokumentaciju za FutureProgress za detalje.
U nastavku ćete naučiti o dva uobičajena obrasca za stvaranje objekta QFuture<void> za vaš zadatak.
Stvaranje zadatka s više niti pomoću QtConcurrent
Prva opcija je izravno koristiti QtConcurrent za započinjanje zadatka istovremeno u drugoj niti. QtConcurrent ima nekoliko različitih funkcija za pokretanje, npr. funkcije klase u drugoj niti. Qt Creator sam po sebi dodaje još nekoliko u src/libs/utils/async.h. Funkcije QtConcurrent za pokretanje istovremenog zadatka vraćaju objekt QFuture. To je ono što trebate proslijediti ProgressManageru u funkciji addTask().
Pogledajte npr. Core::ILocatorFilter. Locator filtri implementiraju funkciju refresh() koja kao parametar prima objekt QFutureInterface. Te funkcije izgledaju otprilike ovako:
void Filter::refresh(QFutureInterface<void> &future) { future.setProgressRange(0, MAX); ... while (!future.isCanceled()) { // Do a part of the long stuff ... future.setProgressValue(currentProgress); ... } }
Stvarno osvježavanje, koje poziva sve funkcije osvježavanja filtera u drugoj niti, izgleda ovako:
QFuture<void> task = Utils::map(filters, &ILocatorFilter::refresh); Core::FutureProgress *progress = Core::ProgressManager::addTask(task, ::Core::Tr::tr("Indexing"), Locator::Constants::TASK_INDEX);
Prvo pokrećemo asinhronu operaciju koja poziva funkciju osvježavanja svih filtera. Nakon toga vraćeni objekt QFuture registriramo kod ProgressManagera.
Ručno stvorite QtConcurrent objekte za svoj thread
Ako vaš zadatak ima vlastita sredstva za stvaranje i pokretanje niti, morate sami stvoriti potrebne objekte i izvijestiti o stanju pokretanja/zaustavljanja.
// We are already running in a different thread here QFutureInterface<void> *progressObject = new QFutureInterface<void>; progressObject->setProgressRange(0, MAX); Core::ProgressManager::addTask(progressObject->future(), ::Core::Tr::tr("DoIt"), MYTASKTYPE); progressObject->reportStarted(); // Do something ... progressObject->setProgressValue(currentProgress); ... // We have done what we needed to do progressObject->reportFinished(); delete progressObject;
U prvoj liniji stvaramo objekt QFutureInterface koji će biti naš način izvještavanja o stanju zadatka. Prva stvar koju izvještavamo je očekivani raspon vrijednosti napretka. Registriramo zadatak kod ProgressManagera koristeći interni objekt QFuture koji je stvoren za naš objekt QFutureInterface. Zatim prijavljujemo da je zadatak započeo i počinjemo s našim stvarnim radom, redovito prijavljujući napredak putem funkcija u QFutureInterfaceu. Nakon što je dugotrajna operacija završena, to prijavljujemo putem objekta QFutureInterface, a zatim ga brišemo.
Prilagodba izgleda napretka
Možete postaviti prilagođeni widget koji će se prikazivati ispod same trake napretka koristeći objekt FutureProgress koji vraća funkcija addTask(). Također koristite ovaj objekt kako biste dobili obavijest kada korisnik klikne na pokazatelj napretka.
Dokumentacija o tipu člana
enum ProgressManager::ProgressFlag
zastavice ProgressManager::ProgressFlags
Dodatne zastavice koje specificiraju detalje u ponašanju. Zadano za zadatak je da nijedna od ovih zastavica nije postavljena.
| Konstanta | Vrijednost | Opis |
|---|---|---|
Core::ProgressManager::KeepOnFinish | 0x01 | Pokazatelj napretka ostaje vidljiv nakon završetka zadatka. |
Core::ProgressManager::ShowInApplicationIcon | 0x02 | Pokazatelj napretka za ovaj zadatak dodatno se prikazuje na ikoni aplikacije u sustavnoj traci ili doku, na platformama koje to podržavaju (trenutno Windows 7 i macOS). |
Tip ProgressFlags je typedef za QFlags<ProgressFlag>. Pohranjuje OR kombinaciju vrijednosti ProgressFlag.
Dokumentacija članovskih funkcija
[static] Core::FutureProgress *ProgressManager::addTask(const QFuture<void> &future, const QString &title, Utils::Id type, Core::ProgressManager::ProgressFlags flags = {})
Prikazuje indikator napretka za zadatak koji je definiran objektom QFuture future .
Pokazatelj napretka prikazuje zadanu title zajedno s traku napretka. type zadatka određuje logičko grupiranje s drugim aktivnim zadacima. Putem parametra flags možete npr. zadržati pokazatelj napretka vidljivim nakon završetka zadatka.
Vraća objekt koji predstavlja stvoreni pokazatelj napretka, koji se može koristiti za daljnju prilagodbu. Životni vijek objekta FutureProgress upravlja se pomoću ProgressManager i zajamčeno traje samo do sljedećeg ciklusa događaja ili do sljedećeg poziva addTask.
Ako želite koristiti vraćeni objekt FutureProgress kasnije, a ne odmah nakon poziva ove funkcije, morat ćete koristiti zaštitne funkcije (npr. omotati vraćeni objekt u QPointer i provjeravati je li vrijednost 0 svaki put kada ga koristite).
[static] Core::FutureProgress *ProgressManager::addTimedTask(const QFutureInterface<void> &futureInterface, const QString &title, Utils::Id type, std::chrono::seconds expectedDuration, Core::ProgressManager::ProgressFlags flags = {})
Prikazuje indikator napretka zadatka koji je dao objekt QFutureInterface futureInterface. Indikator napretka prikazuje zadanu vrijednost title zajedno s trakom napretka. Indikator napretka monotono će rasti s vremenom, pri expectedDuration dosegnut će oko 80% i nastaviti rasti sve sporije.
type zadatka odredit će logičko grupiranje s drugim aktivnim zadacima. Putem parametra flags možete npr. zadržati pokazatelj napretka vidljivim nakon završetka zadatka.
Vidi također addTask.
[signal] void ProgressManager::allTasksFinished(Utils::Id type)
Pošalji kada su svi zadaci e type a završeni.
[static slot] void ProgressManager::cancelTasks(Utils::Id type)
Zakažuje otkazivanje svih aktivnih zadataka zadane type. Funkcionalnost otkazivanja ovisi o tome da aktivni zadatak zapravo provjeri svojstvo QFuture::isCanceled.
[static] Core::ProgressManager *ProgressManager::instance()
Vraća jednu instancu upravitelja napretka.
[static] void ProgressManager::setApplicationLabel(const QString &text)
Prikazuje zadani broj izgradnje ( text ) na platformski ovisan način u ikoni aplikacije na sistemskoj traci zadataka ili doku. Ovo se koristi za prikaz broja pogrešaka pri izgradnji na Windowsu i macOS-u.
[signal] void ProgressManager::taskStarted(Utils::Id type)
Pošalji kad god se započne zadatak određene type.
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.