私は複雑な関係を持つウィジェットのセットを持っています。それらのうちの1つは、ポインタとして格納しなければならないアイテムを作成する必要があります。後で作成されたもう1つのアイテムは、アイテムへのポインタ(QGraphicsScene
)を受け取り、ビューに配置します。オブジェクトの所有権 - どのウィジェットがそれを削除すべきですか?
質問:近いうちに、誰がそのアイテムを削除する必要がありますか?
Widget
は:QGraphicsScene* m_scene
(派生クラス)とその項目の変更を制定GUI要素を含んでいます。
MainWidget
:Widget
を配置するscrollArea、QGraphicsView
を含むscrollArea、およびツールボックスを含みます。近くに - - これはウィジェットm_canvas
を削除する必要があります
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget* w = new Widget();
MainWidget m(w);
m.show();
return a.exec();
}
MainWindow:: MainWindow(Widget *contentWidget, QWidget *parent) : QWidget(parent),
ui(new Ui:: MainWindow),
m_contentWidget(contentWidget),
m_canvas(contentWidget->getCanvas())
{
ui->setupUi(this);
ui->myView->setScene(m_canvas);
ui->editArea->insertWidget(0, m_contentWidget);
}
どちらのクラスがそう
MyCanvas *m_canvas;
を持っている(異なるウィジェットで再利用できるように設計されていますか)?所有者である
Widget
クラス、またはシーンを保持するビューを含む
MainWidget
クラス?
(Widget
でそれを削除 - 論理的な所有者 - 、プログラムをクラッシュさせMainWidget
はまだUIの一部としてそれを必要とするので、私の推測ではあるが)
古いコードベースを維持していない場合は、既にスマートポインタを使用しているはずです。彼らは自動的に所有権の問題を解決し、結果としてそれぞれの削除を気にする必要があります。 – sergiol
私はそれを理解しようとしています、私のシーンアイテムにスマートポインタを使用する方法。 – Thalia