Hmja... prinzipiell ist mir ja schon klar, was Undo/Redo bedeutet. Problematisch ist in meinem Fall einfach, daß die Elemente die ich bearbeiten kann, einfach zu komplex sind, um jede einzelne Änderung abzuspeichern (vielleicht bin ich auch einfach zu faul

).
Ich habe es momentan so implementiert, daß ich eine neue QCanvas anlege und den gesamten Inhalt der "Zeichencanvas" dorthin kopiere, bevor die Änderung zugewiesen wird. Der Zeiger auf diese neue QCanvas wird dann in einer Pointerliste abgelegt. Bei entsprechenden Undo/Redo-Operationen wird dann einfach in der Liste vor oder zurück gegangen und die Elemente aus der dort liegenden Canvas werden dann wieder zurück in die "Zeichencanvas" kopiert.
Leider kommt es hierbei irgendwann zu Abstürzen innerhalb von Qt - zumindest scheint es so - ich vermute irgendwo innerhalb des Qt-internen Garbage Collectors.