Aggregation::Aggregate Class
class Aggregation::AggregateKlasa Aggregate definira skup povezanih komponenti koje se mogu promatrati kao cjelina. Više...
| Header: | #include <aggregation/aggregate.h> |
| Inherits: | QObject |
Napomena: Sve funkcije u ovoj klasi su sigurna za više niti.
Javne funkcije
| Aggregate(QObject *parent = nullptr) | |
| virtual | ~Aggregate() override |
| void | add(QObject *component) |
| T * | component() |
| QList<T *> | components() |
| void | remove(QObject *component) |
Signali
| void | changed() |
Statični javni članovi
| Aggregation::Aggregate * | parentAggregate(QObject *obj) |
Povezani nečlanovi
Detaljan opis
Aggregat je skup komponenti koje se tretiraju kao cjelina, tako da svaka komponenta izvana izlaže svojstva i ponašanje ostalih komponenti u agregatu. Konkretno, to znači:
- Mogu se pretvoriti jedni u druge (koristeći funkcije query() i query_all()).
- Njihov životni ciklus je povezan. To jest, kad god se jedan izbriše, svi se brišu.
Komponente mogu biti bilo koje vrste naslijeđene od QObject.
Možete koristiti agregat za simulaciju višestrukog nasljeđivanja agregacijom. Pod pretpostavkom da imamo sljedeći kod:
using namespace Aggregation; class MyInterface : public QObject { ........ }; class MyInterfaceEx : public QObject { ........ }; [...] MyInterface *object = new MyInterface; // this is single inheritance
Funkcija upita radi kao qobject_cast() s normalnim objektima:
Q_ASSERT(query<MyInterface>(object) == object); Q_ASSERT(query<MyInterfaceEx>(object) == 0);
Ako želimo da object implementira i klasu MyInterfaceEx, ali ne želimo ili ne možemo koristiti višestruko nasljeđivanje, to možemo učiniti u bilo kojem trenutku koristeći agregat:
MyInterfaceEx *objectEx = new MyInterfaceEx; Aggregate::aggregate({object, objectEx})
Aggregat spaja ta dva objekta. Ako imamo bilo koji dio kolekcije, dobivamo sve dijelove:
Q_ASSERT(query<MyInterface>(object) == object); Q_ASSERT(query<MyInterfaceEx>(object) == objectEx); Q_ASSERT(query<MyInterface>(objectEx) == object); Q_ASSERT(query<MyInterfaceEx>(objectEx) == objectEx);
Sljedeće briše sva tri: object, objectEx i aggregate:
delete objectEx; // or delete object; // or delete aggregate;
Kod koji je svjestan agregacije nikada ne koristi qobject_cast(). Uvijek koristi Aggregation::query(), koji se ponaša kao qobject_cast() kao rezervna opcija.
Dokumentacija funkcija članova
Aggregate::Aggregate(QObject *parent = nullptr)
Stvara novi agregat s danim parent-om. Roditelj se izravno prosljeđuje dijelu klase QObject i osim toga se ne koristi.
[override virtual noexcept] Aggregate::~Aggregate()
Brisanje agregata automatski briše sve njegove komponente.
void Aggregate::add(QObject *component)
Dodaje component u agregat. Ne možete dodati komponentu koja je dio drugog agregata ili sam agregat.
Vidi također remove().
[signal] void Aggregate::changed()
Ovaj signal se emitira kada se komponenta doda ili ukloni iz agregata.
Vidi također add() i remove().
template <typename T> T *Aggregate::component()
Šablonska funkcija koja vraća komponentu određenog tipa, ako postoji. Ako postoji više komponenti tog tipa, vraća se nasumično odabrana.
Vidi također Aggregate::components() i add().
template <typename T> QList<T *> Aggregate::components()
Šablonska funkcija koja vraća sve komponente zadane vrste, ako ih ima.
Vidi također Aggregate::component() i add().
[static] Aggregation::Aggregate *Aggregate::parentAggregate(QObject *obj)
Vraća agregatni objekt iz obj ako postoji. U suprotnom vraća 0.
void Aggregate::remove(QObject *component)
Uklanja component iz agregata.
Vidi također add().
Povezani nečlanovi
template <typename T> T *query(QObject *obj)
Izvršava dinamičko pretvaranje tipa koje je svjesno mogućeg agregata kojem obj može pripadati. Ako je obj samog traženog tipa, jednostavno se pretvara i vraća. Inače, ako obj pripada agregatu, provjeravaju se sve njegove komponente. Ako ne pripada agregatu, vraća se null.
Vidi također Aggregate::component().
template <typename T> QList<T *> query_all(QObject *obj)
Ako obj pripada agregatu, vraćaju se sve komponente koje se mogu pretvoriti u zadani tip. Inače se vraća obj ako je onog traženog tipa.
Vidi također Aggregate::components().
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.