Portál AbcLinuxu, 12. května 2025 04:08
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
dynamic_cast
?
(CTabQueryEditor*)QTabWidget.currentWidget()
?
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ý.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 :) }
tab->currentWidget ()->metaObject ()->className ()
.QObject
.
vim ~/.emacs
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.