2017-07-03 1 views
0

これは、シーンのグラフィックアイテムをリストに格納するのに適していますか? 私はQGraphicsItemに仮想メソッドint type()があり、タイプによってアイテムを動的に見つけることができます。つまり、グラフィックアイテムをスタックに別々のリストに保存したいということです。QGraphicsSceneでアイテムを整理する

class Scene : public QGraphicsScene 
{ 
     public: 
     // Constructors etc. 
     private: 
     // Store graphic items in lists by value 
     QList<Carrot> m_carrots; 
     QList<Apple> m_apples; 
}; 

これはダムに聞こえるかもしれないが、主な懸念は、私は私の現在のプロジェクトのすべてのものにポインタを使用してバインドされ、時にはセグメンテーションフォールトがあるされていることがあります。そして

delete item; 
item = nullptr; 

を使用してアイテムを削除し、私はちょうどの問題は、私はそれがこのプロジェクトはかなり巨大であるので、これらの変化が影響する可能性があり、また、につながることができるかはまだ分からないですm_apples.removeAt(index). を言わせて使用​​してアイテムを管理したいですコードの他の部分と多くの時間を取る。しかし、私はそれがより安全な方法でメモリを管理するのに役立つと思います。 ありがとうございます

+0

リストを値で保存していますが、これはスタックとは関係ありません。 –

答えて

0

アイテムを値で保存する場合は、値として扱い、コンテナにメモリを管理させる必要があります。このような項目の明示的なdeleteはバグです。 Qtのアイテム・クラスはコピー可能ではありません - ので次のことができます。QListコピーしているよう

  1. は、派生クラスがコピー可能にします。

  2. コピーする必要がないため、std::listを使用してください。

  3. ユニークなポインタのベクトルを使用します。 std::vector<std::unique_ptr>

+0

@KubaOberのお返事ありがとうございます。私が言いたいことは誰でもそのようなことをして、ポインタを避けることです。私は、qtでオブジェクトを利用する別の方法が存在するかどうかを知りたいと思っていました。しかし、私が進むにつれて、ヒープに割り当てられたオブジェクトに親を割り当てることはかなりうまくいっていることを理解しました。 – Vadixem

+1

私はそのようなことをいつもしています。これにより、より小さくて速いコードが得られます。値で物を保管することをお勧めします。 –

関連する問題