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 kojem je obaviješten i korisniku prikazuje pokazatelj napretka u donjem desnom kutu glavnog prozora klase Qt Creator. Pokazatelj 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 stanju zadatka. 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, stvarate svoj objekt QFuture<void> i pozivate 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 kako biste zapravo pokrenuli zadatak 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 prijaviti stanje početka/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 prijavljujemo 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 QFutureInterface. Nakon što se dugotrajna operacija završi, prijavljujemo to putem objekta QFutureInterface i 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 upotrijebite ovaj objekt kako biste dobili obavijest kada korisnik klikne na pokazatelj napretka.
Dokumentacija o vrstama članova
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. ostaviti 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 za zadatak koji je definiran objektom QFutureInterface futureInterface. Indikator napretka prikazuje zadanu vrijednost parametra title zajedno s trakom napretka. Indikator napretka monotono će se povećavati s vremenom, pri expectedDuration dosegnut će oko 80% i nastavit će rasti sve sporije.
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.
Vidi također addTask.
[signal] void ProgressManager::allTasksFinished(Utils::Id type)
Pošalji kada su svi zadaci e type a dovršeni.
[static slot] void ProgressManager::cancelTasks(Utils::Id type)
Zakažuje otkazivanje svih aktivnih zadataka navedenog type a. 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 zadanu ikonu aplikacije ( text ) na platformski ovisan način u sistemskoj traci zadataka ili doku. Ovo se koristi za prikaz broja pogrešaka pri izgradnji na Windowsu i macOSu.
[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.