crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Undo Framework
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
wiz29 Дата 11.10.2010, 16:26
  Есть ли у кого нибудь еще варианты, помимо предложенных? (буду рад обсудить)
wiz29 Дата 11.10.2010, 15:26
  Спасибо за проявленый интрес, я сделал примерно следующее.
Создал некий объет MySerializer который может упаковывать некие типы данных имеющие интерфейс сериализации.
MyCommandDataAbstract - это интерфейс данных для команды, которую можно сериализовать в неком QIODevice.
+ MyCommandBase c методом SetMyCommandData - устанавливает данные для выполнения команды. Ну и пришлось использовать d MyUndoStack в качестве закрытой реализации QUndoStack. Посути MySerializer, некий упрощенный манагер размещения данных команд.

Просто сохранять/загружать постоянно данные команды не совсем эффективно, как мне кажется, вот для этого и сделал весь огород:)
SABROG Дата 11.10.2010, 13:53
 
Цитата(wiz29 @ 8.10.2010, 12:31) *
но вот что делать с сериализацией?


Судя по примеру из QUndoCommand:

 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;
};


В качестве хранилища можно выбрать любой удобный для тебя инструмент, хоть XML, хоть SQLITE, хоть SQL, хоть QDataStream.
wiz29 Дата 8.10.2010, 11:31
  с redo вроде разобрался. он к месту в приципе, но вот что делать с сериализацией? (данных в объекте Command может быть много и хранить в памяти все дорогое удовольствие)
wiz29 Дата 8.10.2010, 10:30
  Добрый день всем.
Вопрос, можно ли каким либо образом сереализовать команды которые "кладуться" в QUndoStack?
можно ли как то "положить" команду в QUndoStack чтобы при этом не произошло вызова redo?
PS. Просто не хочется реализовывать паттерн Command целиком, кутешный именно по этим 2м причинам не подходит.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 2:51