Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : QScrollview mit (dynamischer) QPixmap



Joker689
18-04-2006, 12:52
Hallo!

Ich habe zwar die API für die QScrollview schon ein wenig überflogen aber noch nichts passendes gefunden, hier mein Problem:

auf einem der Tabs in meiner Anwendung, befand sich eine Pixmap, die ausgewertete Daten grafisch darstellen sollte, das Problem ist, das die Größe der Symbole in Abhängigkeit zur Gesamt-fenstergröße gezeichnet wurden.
Soweit so gut, die Darstellung habe ich kurzerhand auf eine statische Größe "festgenagelt", Problem ist jetzt nur, das die Pixmap jetzt eigentlich größer als der darstellbare Bereich ist.
Ergo habe ich mir überlegt, die Pixmap als child auf eine QScrollView zu legen und mit deren Scrollbalken über die Pixmap zu navigieren.

Wenn neue Werte eingelesen wurden, wird von der Hauptdatei meines Programms die Aktualisierungsmethode für die Zeichnung auf der Pixmap in der entsprechenden Bibliotheksdatei aufgerufen.

Das Problem ist nur, sobald ich die Pixmap mit addchild() auf die QScrollView lege, wird sie nicht mehr korrekt dargestellt und wenn ich nach dem Neuzeichnungsvorgang ein update() auf die QScrollView anwende, sehe ich gar nichts mehr.

Wie stelle ich am besten eine Pixmap auf einer QScrollView dar, deren Maße erst während der Laufzeit initialisiert werden??

anda_skoa
18-04-2006, 14:05
Du könntest statt dem Pixmap ein Label hinzufügen und das Pixmap immer dort neu setzen.

Ciao,
_

Joker689
18-04-2006, 14:43
Ich verstehe nicht ganz, falls Du meintest, das ich statt der Pixmap ein QLabel zur Darstellung nehmen soll, habe ich folgendes Problem:

Die Pixmap ist eher eine von QWidget und QPixmap abgeleitete Klasse (die auch QTable und QPainter verwendet, das ist aber eher unwichtig), die für die grafische Darstellung von Analysedaten verwendet wird.

1. Der darzustellende Inhalt auf der Pixmap wird anhand von ausgewerteten Ergebnissen erst gezeichnet (eine Visualisierung von Analyseergebnissen) und die Menge der Ergebnisse ist von den importierten Daten abhängig

2. man soll mit der Darstellung interagieren können (wenn der User auf ein eingefärbtes Analysefeld klickt, springt er automatisch in einen anderen Tab auf dem Mainwindow zu dem entsprechenden Datensatz...


Ich habe in der Scrollview-Api etwas von Viewport gelesen, legt der Designer die Pixmap eigentlich die Pixmap als child von dem Viewport an oder muss ich da etwas umstellen?
(Weil die Pixmap im Designer-File deklariert ist, kann ich ja nicht wie bei dem Beispiel aus der API vorgehen-->

QScrollView* sv = new QScrollView(...);
QVBox* big_box = new QVBox(sv->viewport());
sv->addChild(big_box);

anda_skoa
18-04-2006, 17:51
Ich befürchte ich versteh das nicht ganz.

Ist das jetzt ein Pixmap oder ein eigenes Widget?

Ciao,
_

Joker689
19-04-2006, 08:31
Ich glaube ich hatte vergessen zu erwähnen, das es sich zwar hauptsächlich auf Pixmap stützt, aber eine von QWidget abgeleitete Klasse ist(chip.h und chip.cpp), die auf QPixmap und QPainter, sowie QTable zugreift...

mein Problem ist, das ich in dieser Datei(=chip.cpp) nicht auf die Scrollview nicht zugreifen kann, da diese in der Mainform.ui deklariert ist, ich in der mainform aber nicht auf die Ausmaße (Weite und Höhe) des Widgets zugreifen kann, da diese in der chip.cpp initialisiert werden...:confused:

P.S.:

Ich habe jetzt nocheinmal auf die Scrollview und deren Inhalt ein repaint() und update() durchgeführt, allerdings hat die abgeleitete Klasse nicht die Abmaße, die sie benötigt (die auch in einer Methode exakt errechnet werden) und deshalb kann die Scrollview sich nicht entsprechend anpassen von den Scrollbalken her :(

anda_skoa
19-04-2006, 17:27
Hmm

Ich bin mir noch nicht sicher, ob ich das richtig verstanden habe, aber vielleicht ist es besser du implementierst dein Widget gleich als QScrollView Subklasse.
Dann hast du volle Kontrolle über Zeichnen usw

Ciao,
_

Joker689
20-04-2006, 09:34
das Problem ist nur, das, insofern ich das headerfile und die cpp-Datei als Scrollview-Subklasse umschreiben will, gibt mir der Compiler eine Fehlermeldung aus in der Mainform.cpp (genaue Fehlermeldung hab ich nicht mehr im Kopf, ist schon 1-2 Wochen her seit ich dann die andere Option gewählt habe) jedenfalls ist es ein Pointerkonflikt direkt in der Zeile, wo das Scrollview-abgeleitete Subklassenwidget deklariert werden soll.

Mittlerweile bin ich dahin gelangt, das ich nur noch von der mainform.ui.h auf die in der chip.cpp errechneten X und Y-Abmessungen der "Pixmap" zugreifen muss um ein korrektes resize(xsize, ysize) durchführen zu können, dann müsste alles soweit passen, werde mich nochmal in Wertrückgabe schlau machen...
Danke für Deine Hilfe!