Добрый день всем.
Вопрос, можно ли каким либо образом сереализовать команды которые "кладуться" в QUndoStack?
можно ли как то "положить" команду в QUndoStack чтобы при этом не произошло вызова redo?
PS. Просто не хочется реализовывать паттерн Command целиком, кутешный именно по этим 2м причинам не подходит.
с redo вроде разобрался. он к месту в приципе, но вот что делать с сериализацией? (данных в объекте Command может быть много и хранить в памяти все дорогое удовольствие)
class AppendText : public QUndoCommand
{
public:
AppendText(QString *doc, const QString &text)
: m_document(doc), m_text(text) { setText("append text"); }
virtual void undo()
{ m_document->chop(m_text.length()); }
virtual void redo()
{ m_document->append(m_text); }
private:
QString *m_document;
QString m_text;
};
Спасибо за проявленый интрес, я сделал примерно следующее.
Создал некий объет MySerializer который может упаковывать некие типы данных имеющие интерфейс сериализации.
MyCommandDataAbstract - это интерфейс данных для команды, которую можно сериализовать в неком QIODevice.
+ MyCommandBase c методом SetMyCommandData - устанавливает данные для выполнения команды. Ну и пришлось использовать d MyUndoStack в качестве закрытой реализации QUndoStack. Посути MySerializer, некий упрощенный манагер размещения данных команд.
Просто сохранять/загружать постоянно данные команды не совсем эффективно, как мне кажется, вот для этого и сделал весь огород
Есть ли у кого нибудь еще варианты, помимо предложенных? (буду рад обсудить)
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)