[gelöst] Ein Widget, das Widgets anzeigt

Alles rund um die Programmierung mit Qt
Antworten
kalsan

[gelöst] Ein Widget, das Widgets anzeigt

Beitrag von kalsan »

Liebe Leute,
ich habe ein Objekt, das als Leinwand fungiert und andere Objekte (z.B. Bällchen), die darauf angezeigt werden. Ein Klick auf die Leinwand erstellt ein neues Bällchen. Um dies umzusetzen, dachte ich mir, ich mache aus der Leinwand ein Widget und aus jedem Bällchen ein weiteres (allerdings von einer anderen Klasse). Dann wäre das Leinwandwidget ein Kind des Layouts, in dem es sich befindet und jedes Bällchenwidget ein Kind des Leinwandwidgets. Die Leinwand verwaltet die Bällchen (z.B. deren Drag&Drop-Verhalten falls mehrere ausgewählt wurden, ihre Position auf dem Bildschirm, Erstellen und Löschen von Bällchen etc.) und jedes Bällchen kümmert sich um seinen eigenen Kram wie QPainter, Klick Event Handling usw. Ich möchte, dass der Benutzer Bällchen durch Drag&Drop auf der Leinwand frei verschieben kann.
Nun stellt sich die Frage, wie die Leinwand die Bällchen am besten darstellt. Soll sie die Pixmaps der einzelnen Bällchen auf sich selbst zeichnen oder geht das eleganter (z.B. indem sie die draw-Funktion für jedes Kind aufruft)? Ist es sinnvoll, dass jedes Bällchen mit Events umgeht, oder sollte die Leinwand besser selber rausfinden, ob und welches Bällchen geklickt / gedragt wurde?
Falls mein allgemeines Design suboptimal ist, kann gern auch darüber diskutiert werden. Ich bin offen für allerlei Inspirationen.
lg
Kalsan
Zuletzt geändert von kalsan am 19. April 2015 21:39, insgesamt 1-mal geändert.
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Ein Widget, das Widgets anzeigt

Beitrag von veeman »

Schau dir die QGraphicsView Klasse an. Die sollte genau auf dein Vorhaben passen.
kalsan

Re: Ein Widget, das Widgets anzeigt

Beitrag von kalsan »

Sieht sehr gut aus, vielen Dank für deine Antwort! Da lese ich mich auf jeden Fall noch ein.
Falls jemand dasselbe Problem hat wie ich, so kann er sich auch http://doc.qt.io/qt-5/qtwidgets-dragand ... ample.html ansehen, das ist ein weiterer interessanter Ansatz.
lg
Kalsan

EDIT: Die Lösung von veeman ist wesentlich besser geeignet und deutlich eleganter als das Puzzle Example.
Antworten