Qt QSqlRelationalTableModel

 ( charon | 2010. szeptember 6., hétfő - 11:41 )

Hi,

Felallas a kovetkezo:
Table1: id, a, b, c, d
Table2: id, FK_Table1_id, e

Van ket tabla, Table2-ben egy foreign_key a masikra. Egy TableView-ban szeretnem megjeleniteni az alabbi oszlopokat irasra is:
Table1.a Table1.b Table1.c Table2.e

A problemam: Ha a Table2-t egy QSqlRelationalTableModel-nek "valasztom" akkor a setRelation-nel csak 1 oszlopra tudok raakaszkodni
Table2->setRelation(1, QSqlRelation("Table2", "id", "a") );
Tehat nem tudom megjeleniteni a maradek oszlopokat (b,c);

Milyen megoldast javasoltok arra, hogy meg tudjam jeleniteni az osszes kivant oszlopot?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ha nem akarsz új modelt implementálni, szerintem nem fog menni, mert a beépített model kb ennyit tud. Lehet hogy tévedek mondjuk, majd a kollégák javítanak :)

Ami még szóbajöhet csúf megoldásként, hogy a FK_Table1_id oszlopot annyiszor szerepelteted, ahány kereszthivatkozást szeretnél, tehát a fenti példában:

Table2: id, FK_Table1_id, FK_Table1_id, FK_Table1_id,e

... és persze mindegyik oszlopra más relation-t állítasz be. Nem szépségdíjas, de talán működőképes :)

Koszi szepen.

Szivesen implementalok uj modelt, csak nem vagyok biztos abban, hogy melyikbol kell szarmaztatni. QSqlRelation...-bol szarmaztattam, es felulirtam columnCount()-ot, hogy +3 oszloppal terjen vissza. A data() member fv-t, hogy az uj oszlopokra a FK-s oszlop adatat adja vissza, de nem ment, mert az uj oszlopokra nem ment setRelation().

DB hack-et nem szeretnem, mert akkor egy kicsit redundans lesz az adat.

Szoval jo lenne az uj implementacioja, csak lovesem nincs, hogy mibol szarmaztassak es miket irjak felul. Ha erre lenne valakinek vmi hintje vagy egy picike code snipplet azt megkoszonnem!

Hát inkább a QAbstractTableModel-t vagy a QAbstractItemModel kell kiindulásnak használnod. A kötelezően újraimplementálandó részen kívül a setTable és a setRelation dolgokat kell mindenképpen megírnod, ami nem kis feladat, de talán kivitelezhető. Ilyesmit én még nem csináltam, lehet hogy valaki okosabbat tud mondani, de ha van egy félkész futtatható kódod, szívesen elturkálom :)