2

私は qt の undo フレームワークを使用しています。これは qundocommand を使用してアプリケーション サポートの取り消しを行います。これらの qudocommand をファイルに保存して再読み込みする簡単な方法はありますか?

4

3 に答える 3

2

組み込みの方法はありません。セッション間で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を使用してファイル管理を処理できます。

于 2012-05-02T22:00:23.767 に答える
1

ここで説明されているように、Qt のシリアル化を使用します。

Qt によるシリアル化

次に、QUndoCommands 内で、一時ファイルを使用してデータを書き込むことができます。

http://qt-project.org/doc/qt-4.8/qtemporaryfile.html

ただし、これにより問題が発生する可能性があります。これは、各ファイルが開いたままになり、一部のプラットフォーム (Linux) では、開いているファイル ハンドルが不足する可能性があるためです。

これに対抗するには、コマンドを処理する他のファクトリ タイプ オブジェクトを作成する必要があります。これにより、QTemporaryFile への参照が自動的に渡されます。この factory/QUndoCommand Care Taker オブジェクトは、QUndoCommands と同じ寿命を持つ必要があります。そうでない場合、一時ファイルはディスクから削除され、QUndoCommands が壊れます。

他にできることは、QUndoCommand を実際の元に戻すコマンドのプロキシとして使用することです。これは、元に戻すコマンドがファイルに保存されるときに、内部ポインターを削除したり、null に設定したりできるため、かなりの量のメモリを節約できることを意味します。その後、後で復元します。

于 2013-02-12T13:34:26.217 に答える