Wenn ich im QUndoStack ein QUndoCommand 'pushe' und im QUndoCommand::redo() draufkomme, dass die gewünschte Aktion nicht zulässig ist, wie kann ich verhindern, dass das gerade ausgeführte QUndoCommand in den QUndoStack kommt, bzw. wie kann ich es nachträglich entfernen?
Das Problem ist, dass ich Funktionen im QUndoCommand::Redo() aufrufe, die Aktionen ausführen und einen Rückgabewert liefern, ob die Aktion erfolgreich ausgeführt worden ist oder nicht.
Das Undo-Framework von Qt unterstützt keine Fehler, zumindest keine fehlschlagenden Commands. Wir sind auf das gleiche Problem gestossen, siehe http://bugreports.qt.nokia.com/browse/QTBUG-7096 Da die Erweiterung des Qt-Undo-Frameworks ein Murks wäre oder massive Auswirkungen auf bestehenden Code hätte, vermute ich, dass "wir" uns selber helfen müssen. Jedenfalls haben wir uns ein kleines Framework geschrieben, dass mehr oder weniger die gleiche Funktionalität wie Qt's Undo-Framework hat, aber fehlschlagende Operationen unterstützt. Melde Dich, wenn Du Interesse daran hättest.
Danke für dein Angebot. Ich habe inzwischen das Qt-Undo-Framework
erweitert (push wird nicht sofort ausgeführt), allerdings nicht komplett neugeschrieben.