Animationsprogramm Model View

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Hallo zusammen,

ich arbeite gerade an einem kleinen Animationsprogramm, bei dem ich bisher fast vollkommen auf das Model View Framework verzichte. Ich mit mittlerweile an einem Punkt angekommen, wo ich mich fast um alles "selbst" kümmern muss:

Setze ich zum Beispiel ein Keyframe, muss ich mich darum kümmen, dass dieser Keyframe in eine Timeline hinzugefügt wird. Lösche ich den Keyframe aus der Timeline, so muss ich von Hand, das Widget updaten, in dem sich die Parameter zu diesem Keyframe befindet und den jeweiligen Keyframe aus meinem Model löschen.

Wechsle ich das aktuelle Objekt, so muss ich mich darum kümmern, dass alle Keyframes in der Timeline ausgetauscht werden.

Lauter solches Zeug. Die Timeline habe ich als QGraphicsView und die einzelnen KeyframeIndicatoren als QGraphicsItems implementiert. Ändere ich einen Keyframe, so wird die komplette GUI geupdatet. Ich habe das Gefühl, dass ich mich im Kreis drehe, da ich nicht sehe wie ich das Ganze in das Model/View Framework von Qt einarbeiten kann. Und auf diese händische Updaterei hab ich auch keine Lust.

Grüße,
anogayakes
lunar

@anogayales: Im Model View Framework von Qt gibt es keine "Timelines" und keine "Keyframes", wo bitte ist hier also der Zusammenhang zum Model View Framework?
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Ich dachte, dass ich mein Model, dass ich mir gebaut habe, in irgendeiner weise in das bestehende Konzept von Qt einarbeiten kann.

Jetzt mal unabhängig von Qt werden Model-View Frameworks mit einem Beobachter gebaut. Sprich, wenn sich das Model ändert, wird die benachrichtigt und updatet sich bei bedarf selbst.
Momentan habe ich ja nicht einmal das. Wenn sich etwas in der View verändert, benachrichtigt das Model bisher niemanden, sondern die View benachrichtigt, andere Views und ändert danach was am Model. Sprich: Man programmiert sich zu Tode.

Ich war der Meinung, dass Qt einen solchen Mechanismus anbietet, also für beliebige Modelle. Wenn es sowas nicht gibt. Wie soll ich am besten vorgehen?

Grüße,
anogayales
BlackJack

@anogayales: So ganz allgemein hat Qt das Signals/Slots-Konzept, dass Du sicher für die Entkopplung von Modell und Anzeige(n) gut verwenden kannst.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Ja, das Signal/Slot Konzept benutze ich bereits. Ich bin mir nur noch nicht im klaren wo genau ich und wie genau ich das in meinem Programm unter bringe. Bisher weiß das Model noch überhaupt nichts von Qt, geschweige den Qt Signalen. Bisher habe ich das so gelöst: Wenn ich in der GUI an einem Parameter ein Keyframe setzte wird ein Signal an die Timeline gesendet, und diese updatet darauf ihren Inhalt. Wiederum, wenn ich einen Keyframe in der Timeline verschiebe schicke ich ein Signal an das Parameterfenster. Das Model wird dann in der jeweiligen View modifiziert.

Alles in allem ein "großer" Programmieraufwand. Meine Frage ist nur, ob ich das besser machen kann. Schließlich will ich auch was lernen :)

Grüße,
anogayales
deets

Qt kann ja nicht jeden Anwendungsfall vorhersehen. Aber ich verstehe dein Problem auch nicht: dein Modell - zB eine Liste von Keyframes - muss doch einfach nur Signale verschicken, wenn es sich aendert.

Und ein View hoert eben auf diese Signale, und updated sich selbst. Das ist das Prinzip von MVC. Das Qt-MVC-Framework hat einfach nur schon Modelle fuer bestimmte, haeufige Faelle vorgesehen.
Antworten