У меня есть набор виджетов со сложными отношениями. Один из них ДОЛЖЕН создать элемент, который, я думаю, должен храниться как указатель. Другой, созданный позже, получает указатель на элемент - QGraphicsScene
- и помещает его в представление.Собственность на объект - какой виджет должен удалить его?
Вопрос: при закрытии, кто, если есть, должен удалить товар?
Widget
: содержит элементы графического интерфейса пользователя, что ввести в действие изменения на QGraphicsScene* m_scene
(производный класс) и его элементов.
MainWidget
: содержит scrollArea, где он размещает Widget
, scrollArea, содержащий QGraphicsView
и панель инструментов. (Она предназначена для повторного использования различных виджетов)
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;
Так что - при закрытии - что виджет должен удалить m_canvas
? Класс Widget
, кто является владельцем, или MainWidget
класс, который содержит просмотр сцены?
(удалить его в Widget
- логический владельца - делает аварийное завершение программы, я думаю, потому что MainWidget
все еще требуют как часть Ui)
Если вы не поддерживаете старую базу кода, вы уже должны использовать интеллектуальные указатели. Они автоматически решают вопросы собственности, и, как следствие, они должны заботиться о соответствующем удалении. – sergiol
Я пытаюсь понять, как использовать умные указатели для моего объекта сцены. – Thalia