2012-05-02 7 views

答えて

1

組み込みの方法はありません。セッション間で元に戻すスタックを保存するのは一般的ではないと思います。スタック上のコマンドを反復し、それぞれの固有のデータを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を使用してファイル管理を処理できます。

+0

ディスクに書き込む他の理由があります - もしあなたが500の取り消しコマンドを持っていれば、それはメモリ使用量を増やします。 – paulm

1

使用Qtのシリアライズここで説明するように:

Serialization with Qt

は、その後、あなたのQUndoCommands以内にあなたがそれにデータを書き込むために一時ファイルを使用することができます。

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

しかし、これが発生する可能性があります各ファイルが開いたままになっているため、いくつかのプラットフォーム(Linux)で開いているファイルハンドルが足りなくなる可能性があります。

これに対処するには、コマンドを処理する他のファクトリタイプのオブジェクトを作成する必要があります。この場合、QTemporaryFileへの参照が自動的に渡されます。このファクトリ/ QUndoCommandケアテイクオブジェクトは、QUndoCommandsと同じ存続期間を持つ必要があります。そうでない場合は、一時ファイルがディスクから削除され、QUndoコマンドが破損します。

もう1つのことは、あなたの実際の元に戻すコマンドの代理としてQUndoCommandを使用することです。これは、元に戻すコマンドがファイルに保存されているときに内部ポインタを削除/設定できるのでnullにするその後、それを復元します。

関連する問題