Portál AbcLinuxu, 12. května 2025 04:08

Dotaz: c++ a Qt

11.10.2006 10:49 neaktivni | skóre: 24 | blog: neaktivni
c++ a Qt
Přečteno: 173×
Odpovědět | Admin

Programuji nove v c++ a mam problem, ktery nevim, jak elegantne resit. Pokusim se ho popsat.

Pouzivam toolkit Qt 4.1. Davam dohromady SQL manazer, jehoz snimek si prohlednete pro lepsi pochopeni meho zivotniho problemu.

Tabu (QTabWidget) v prave casti muze byt nekonecno a obsah tabu muze byt ruznych trid (na obrazku trida, ktera bude zajistovat Query editor a jeho vystup). Jina trida s jinymi metodami bude u tabu pro editaci tabulek atd.

A ja nevim, jak pracovat z obsahem tech tabu. Napr kdyz je widget na tabu tridy CTabQueryEditor a ma metodu GetActiveDB(), jak tu metodu zavolam, kdyz funkce currentWidget() tridy QTabWidget vraci QWidget*, ktery rozhodne nema metodu GetActiveDB()?

Kdyby byl pocet tabu a jejich druhu staticky, nebyl by problem, ale takto nevim co stim. Nedokazu nejak rozumne pristoupit k dane tride. Prosim zkusenejsi ++kare o radu, priklad a podobne. Prohledaval jsem web, tutorialy a referencni prirucky Qt, ale nevim, co presne hledat, takze je to zatim bez uspechu.

Dik

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.10.2006 10:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: c++ a Qt
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejsem si úplně jistý, zda jsem zcela přesně pochopil váš problém, ale není řešením RTTI a dynamic_cast?
11.10.2006 11:00 neaktivni | skóre: 24 | blog: neaktivni
Rozbalit Rozbalit vše Re: c++ a Qt
Jo, to sem vcera take nekde cetl a myslim, ze by to mohlo byt docela mozne, ale nevim, jestli to dokazu pouzit. Kdyby byl nejaky dobry link, bylo by to jeste lepsi. Ale jinak dik za nakopnuti. Jdu hledat.
11.10.2006 11:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: c++ a Qt
Zkuste se podívat do Thinking in C++, je to popsáno ve druhém dílu, sekce 3.8.
11.10.2006 11:21 neaktivni | skóre: 24 | blog: neaktivni
Rozbalit Rozbalit vše Re: c++ a Qt
Diky moc. Uz to funguje. Mel jste pravdu.
11.10.2006 11:06 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: c++ a Qt
Odpovědět | | Sbalit | Link | Blokovat | Admin
(CTabQueryEditor*)QTabWidget.currentWidget() ?
msk avatar 11.10.2006 11:53 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: c++ a Qt
No, radsej ten dynamic cast.
11.10.2006 14:39 Boris Dušek | skóre: 22 | blog: everything
Rozbalit Rozbalit vše Re: c++ a Qt
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkuste qobject_cast<Trida>(object) a metodu QObject::inherits (const char * className) (imho právě tuhle metodu používá ten qobject_cast. Použití těch Qt variant (qobject_cast) by mělo být rychlejší než těch standardních C++, ale nejsem si jistý.

Ukázkový kód by byl asi takhle:
CTabQueryEditor * editor;
if (editor = qobject_cast<CTabQueryEditor *>(tab->currentWidget ()))
{
    //cast se podařil, Váš kód
    editor->GetActiveDB ();
    ...
} else {
    //cast se nepodařil, buď cast na něco jiného, nebo error :)
}


Nebo se dá zjistit přímo typ toho widgetu -
metodou tab->currentWidget ()->metaObject ()->className ().

Vše ve zmíněné dokumentaci k QObject.
vim ~/.emacs

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.