私は qt の undo フレームワークを使用しています。これは qundocommand を使用してアプリケーション サポートの取り消しを行います。これらの qudocommand をファイルに保存して再読み込みする簡単な方法はありますか?
3 に答える
組み込みの方法はありません。セッション間でUNDOスタックを保存することはあまり一般的ではないと思います。スタック上のコマンドを繰り返し処理し、 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 への参照が自動的に渡されます。この factory/QUndoCommand Care Taker オブジェクトは、QUndoCommands と同じ寿命を持つ必要があります。そうでない場合、一時ファイルはディスクから削除され、QUndoCommands が壊れます。
他にできることは、QUndoCommand を実際の元に戻すコマンドのプロキシとして使用することです。これは、元に戻すコマンドがファイルに保存されるときに、内部ポインターを削除したり、null に設定したりできるため、かなりの量のメモリを節約できることを意味します。その後、後で復元します。