Seite 1 von 1

QGraphicsItem: Rechteck mit Löchern - möglichst performant?

Verfasst: 12. Februar 2010 20:12
von -=Freaky=-
hi,

ich habe eine frage bzgl. eines QGraphicsItems, wie im titel beschrieben.
ich verwende momentan ein QGraphicsPathItem und haette das eigentlich gerne etwas performanter, sprich, "schneller" besonders beim skalieren.

stellt euch ein typisches 4gewinnt-feld vor.
eine flaeche mit 7x6 loechern drin und die spielsteine muessen "dahinter" runterfallen, bis sie unten liegenbleiben.
momentan, wie gesagt, ein QGraphicsPathItem, dem ich ein "roundedRect" und diverse "ellipses" hinzugefuegt habe.

wenn ich im QGraphicsView im resizeEvent nun folgendes habe:

Code: Alles auswählen

fitInView(scene()->itemsBoundingRect(), Qt::KeepAspectRatio);
wobei das besagte "spielfeld" mit loechern natuerlich teil der scene ist, dann ruckelt das auch auf wirklich nicht langsamen rechnern ziemlich. manchmal haengt es bis zu 1 sekunde, bis das "spielfeld" entspr. skaliert ist.

nun fallen mir allerdings auch keine wirklich guten alternativen zu diesem aufbau ein.
vllt. irgendwie prozedural eine textur mit transparenten kreisen an den stellen der "loecher" erstellen und ein QGraphicsPixmapItem benutzen, aber das klingt daemlich ...
ansonsten wuesste ich nichts sinnvolles, sodass man wirklich durch diese flaeche durch die items der hinteren ebenen sehen kann.

habt ihr vllt. einen oder gerne auch mehrere vorschlaege fuer mich?

vielen dank im voraus!

mfg,
julian

Verfasst: 12. Februar 2010 20:28
von upsala
Man kann das doch ohne Probleme in 7x6 Items aufteilen.

Verfasst: 12. Februar 2010 20:36
von -=Freaky=-
kann man das?
also klar, wenn man ein statisches feld hat, geht das.
aber ich wuesste nicht, wie ich das mit mehreren items anstellen soll, wenn man bspw. hinter dem "spielfeld" noch die bewegungsanimationen der fallenden spielsteine oder so etwas sehen soll, die man eben nur durch die loecher sehen kann.

falls du dafuer einen ansatz hast, habe ich ihn nicht und es waere nett, wenn du ihn mir erklaeren koenntest. :)

mfg,
julian