1

QtのQGraphicsScene機能に基づいてQtで画像ビューアを作成しています。ImageModelというクラスで各画像のモデルを作成し、ImageViewというクラスで画像の表示を管理しています。ImageViewクラスは次のとおりです(興味深い部分だけです)。

class ImageView
{
public:
    ImageView(QWidget *parent);

    QGraphicsView * getView() {return view; }

private:

    //qgraphics scene elements
    QGraphicsScene *scene;
    QGraphicsView *view;
    QGraphicsPixmapItem *curItem;


};

クラスのコンストラクターは次のとおりです。

ImageView::ImageView(QWidget *parent)
{

    //create scene and view with parent the main window
    //such that the memory management is done by qt
    scene = new QGraphicsScene(parent);
    view = new QGraphicsView(parent);

    view->setScene(scene);
}

また、QMainWindowの派生にImageViewへのポインターがあります。

私の質問は、メインウィンドウをビューとシーンの親として設定してQtにメモリ管理を行わせるか、それとも自分でメモリ管理を行うか(ビューとシーンを親なしのままにして、クラスで削除するか)です。デストラクタ)?この場合の良い戦略は何ですか?

4

3 に答える 3

0

ビューをメインウィンドウ内にネストする場合は、ビューを子にする必要があります。

あなたの一般的な質問については、これは本当にあなたの望むオブジェクトの存続期間と所有権のセマンティクスに帰着します。ビュー/シーンをメインウィンドウよりも長持ちさせたくない場合は、はい、それらは子である必要があります。以前に他の方法でそれらを削除するオプションがまだあります。

于 2012-12-07T16:02:36.043 に答える
0

あなたがそれらをもう必要としないならば、あなたは親の生涯を通してそれらを保持する理由がありますか?そうでない場合は、なぜそのメモリを割り当てたままにしておきたいのかわかりません。

リソースが不要になった場合は、必要がない理由がない限り、リソースを解放する必要があります。親がいるかどうかに関係なく、削除できることに注意してください。親を持つオブジェクトを削除すると、そのオブジェクトは親の子のリストから削除されます。

于 2012-12-07T15:48:12.493 に答える
0

Qtに削除を任せます。その便利で安全です。必要のない参照を保持しないでください。たとえば、レイアウトを追加し、削除するためだけに参照を保持することは価値がありません。

于 2012-12-10T14:18:09.290 に答える