2012-01-28 5 views
2

私は、ベクトルのベクトルを保持する独自のクラスを作成しました。各クラスはカスタムQGraphcsItem(チャート)を保持しています。私はアンドゥ/リドゥ機能を作成しようとしています。私が取っているアプローチは、スタックを使ってチャートの各状態を保持する方法です。私が考えている2つのアプローチがある: Qt C++ - オブジェクトのクローン化

  1. が順番にすべてQGraphicsItemsのクローンを作成する必要があり、その中のすべてのサブベクトルを、クローンを作成する必要がありますトップレベルQVectorのクローンを作成します。私は各次元をループすることができ、外部ループのQVectorを作成し、内部ループにQGraphicsItemをクローンすることができます(基本QVectorをクローンするだけでなく、内部のすべてが本物です。

  2. グラフを直接複製するのではなく、チャートの現在の状態から基本的に新しいQVectorを構築します。各QGraphicsItemには、必要なプロパティを取得するget/set関数があります。新しいトップレベルQVectorを作成し、外部ループを作成して各行に新しいQVectorを作成し、内部ループを作成して新しいQGraphicsItemsを作成し、チャート。

1つのアイテムをクローンする簡単な方法はありますか?あるいは、私は自分のクローン機能を実装し、現在の状態を "再構築"する必要がありますか?

+0

Qtには元に戻す/やり直しの実装がありますか? http://developer.qt.nokia.com/doc/qt-4.8/qundo.html – borges

+0

「QGraphcsItem」はコピーできません。 – Lol4t0

答えて

2

コメントをいただきありがとうございます。私はQtの元に戻す/やり直しの実装について知りませんでした。私はもう少しコントロールのために私自身の実装を終了しました。

似たような問題を持つ他の人たちについては、後でQGraphicsItemsで埋められたグラフの「状態」を保持する新しい2Dベクトルの作成を試みました。チャートが更新されるたびに10,000個の新しいQGraphicsItemsが生成され、現在の10,000個が削除され、新しい10,000個が追加されたことは確かに遅かったです。

代わりにQGraphicItemsではなく、チャートの状態のプロパティ(QColor、文字列など)を保持する2DVectorを格納するように変更しました。これにより、チャートを完全に再作成するのではなく、単にチャートを更新することができました。

関連する問題