Ich habe eine Reihe von Widgets mit einer komplexen Beziehung. Einer von ihnen MUSS ein Objekt erstellen, von dem ich denke, dass es als ein Zeiger gespeichert werden muss. Der andere, der später erstellt wird, erhält den Zeiger auf das Element - eine QGraphicsScene
- und legt es in einer Ansicht ab.Eigentum des Objekts - welches Widget sollte es löschen?
Die Frage: am Ende, wer, wenn überhaupt, sollte das Element löschen?
Widget
: enthält GUI-Elemente, die Änderungen an einem QGraphicsScene* m_scene
(a abgeleiteten Klasse) und seine Elemente verordnen.
MainWidget
: enthält eine scrollArea, in der Widget
, eine scrollArea mit QGraphicsView
und eine Toolbox platziert wird. (Es ist so konzipiert, durch verschiedene Widgets wiederverwendbar sein)
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);
}
Beide Klassen
habenMyCanvas *m_canvas;
So - auf close - das Widget sollte m_canvas
löschen? Die Widget
Klasse, wer ist der Besitzer oder MainWidget
Klasse, die die Ansicht enthält, die die Szene enthält?
(es im Widget
Löschen - der logischen Besitzer - macht Programmabsturz, meine Vermutung ist, weil MainWidget
es immer noch als Teil des ui erfordert)
Wenn Sie keine alte Codebasis pflegen, sollten Sie bereits Smart Pointer verwenden. Sie lösen automatisch Eigentumsprobleme und müssen sich um das jeweilige Löschen als Konsequenz kümmern. – sergiol
Ich versuche herauszufinden, wie man intelligente Zeiger für mein Szenenobjekt verwendet. – Thalia