[Megoldval] Qt4 TreeWidget checkstate

Hali,

Szeretnem, ha a parent checkstate ki/be kapcsolasa tovabb menne a child item-ekre is. Mivel lehetne ezt beallitani?

A masik kerdes az volna, hogy a checkstate box-ot be lehet-e kapcsolni globalisan a designer-ben, mert nekem csak item-enkent megy (bar ez kevesbbe fontos, mert ugy sem a designer-rel lesznek betoltve az item-ek).

Koszi,

/sza2

PS: es letezik ilyen:

A setFlags-szel a QtCore.Qt.ItemIsTristate-et beallitva pont az a mukodes amit elvar az ember.

Hozzászólások

Tipp:

implementálsz egy slotot, amelyet a "parent" objektumod stateChanged(int state) signáljához kötsz. A slotban aztán végigmész a parent gyerekein: ezt a children() függvénnyel tudod leérni*, ami QObjectListet ad vissza. Végigmész a kapott listán**, és beállítod a checkstate-eket a signál által kibocsátott state állapotra.

* opcionálisan a sender() függvény a slotban visszaadja azt a parentet, ami küldte a signalt. Vigyázz, ezt dynamic_castolni kell QCheckBoxra, illetve ellenőrizni kell, nem 0-e.
** Amikor végigiterálod a QObjectListet, érdemes lehet ellenőrizni, hogy az adott QObject az QCheckBox-e, ez pl lehetséges a qobject_cast<QCheckBox*>(obj) függvénnyel.

Nem próbáltam most ezeket ki, de hátha segít

Igen, en is ezt a megoldast lattam legtobb helyen, arra gondoltam, akad valami olyan "tulajdonsag" a QTreeWidget-hez, amivel ez automatikus. Egy meglevo wx-es feluletet barkacsolok at Qt-re es a wx-ben volt ilyen lehetoseg (marmint, a tree-nek volt egy bekapcsolhato tulajdonsaga, hogy osszerendelje-e a szulo/gyerek checkbox-okat).

*, ** BTW, Python-ban irom, de valahogy majd rajovok (vagy google rajon:-)

Koszi,

/sza2

Bár nem írtad a konkrét példát, gyakori igény az, hogy ha egy "parent" QCheckBox mellől ki van szedve a pipa, akkor az alatta lévők is kikapcsolódjanak. Erre esetleg alkalmas lehet egy QGroupBox, amely checkable.

Uh, elnézést, a topic címén kívül mindent elolvastam. Azt hittem, egyszerű checkboxokról van szó, amelyeknek a parentje nem szemantikai parent, hanem a QObject-hierarchia szerinti parent.

MyBad, akkor természetesen teljesen másról van szó.

collapseAll() kéne neked, de csak egy-egy subnode-ra, ha jól értem. Hát igen, az API-ban erre nem látok gyors megoldást.

Igen, csodálkozom is, hogy nincs erre megoldás. Subclasseld! De okosan kéne, először a fő elemet elrejteni, aztán a már nem látszó elemeken rekurzívan végigmenni, setExpanded()-del. Bár konkrétan még nem csináltam ilyent, de gyanítom így lenen hatékony: biztosan csak egy redraw kell.