Я использую фреймворк qt, который использует qundocommand для отмены отмены поддержки приложения. Есть ли простой способ, который я могу использовать, чтобы сохранить эти qundocommand в файл и перезагрузить его?Как сохранить qundocommand в файл и перезагрузить его?
ответ
Нет встроенного способа. Я не думаю, что очень часто приходится сохранять стопку отмены между сеансами. Вам придется сериализовать команды самостоятельно, итерации с помощью команд в стеке и сохранения уникальных данных каждого из них с помощью QDataStream. Это может выглядеть примерно так:
...
dataStream << undoStack->count(); // store number of commands
for (int i = 0; i < undoStack->count(); i++)
{
// store each command's unique information
dataStream << undoStack->command(i)->someMemberVariable;
}
...
Тогда вы будете использовать QDataStream снова для десериализации данных обратно в QUndoCommands.
Вы можете использовать QFile для управления файлами. Сериализация
Используйте Qt, как описано здесь:
Тогда в ваших QUndoCommands вы можете использовать временный файл для записи данных на него:
http://qt-project.org/doc/qt-4.8/qtemporaryfile.html
Однако это может привести к вы проблема, так как каждый файл остается открытым, и так далее на некоторых платформах (Linux) у вас могут закончиться открытые дескрипторы файлов.
Для борьбы с этим вам нужно будет создать другой объект фабричного типа, который обрабатывает ваши команды, - тогда это может автоматически передаваться в QTemporaryFile. Этот объект фабрики/QUndoCommand должен иметь тот же срок службы, что и QUndoCommands. Если нет, то временный файл будет удален с диска, и ваши QUndoCommands сломаются.
Другое, что вы можете сделать, это использовать QUndoCommand в качестве прокси-сервера для вашей реальной команды отмены - это означает, что вы можете сэкономить немалую память, поскольку, когда ваша команда отмены сохраняется в файл, вы можете удалить внутренний указатель/установить его to null. Затем восстановите его позже.
Есть другие причины для записи на диск - если у вас есть 500 команд отмены, это увеличит использование памяти. – paulm