如何将 children 添加到 QGraphicsItem
How to add children to QGraphicsItem
我有以下代码,其中我尝试有两个矩形,然后在每个矩形内显示 "sub" 个矩形(这是一个 parent 和一个 child)
auto graphicsView = std::make_unique<QGraphicsView>();
auto scene = std::make_unique<QGraphicsScene>();
graphicsView->setScene(scene.get());
auto parent1 = std::make_unique<QGraphicsRectItem>(0, 0, 100, 200);
parent1->setBrush(QBrush(QColor(Qt::cyan)));
scene->addItem(parent);
auto subRect1 = std::make_unique<QGraphicsRectItem>(10, 10, 50, 50, parent1);
subRect1->setBrush(QBrush(QColor(Qt::yellow)));
我的例外是,当我显示 QGraphicsView
时,我会看到一个青色矩形 (parent1
),在其顶部我还会看到一个黄色的小矩形 (subRect1
), 但我只能看到青色的。
查看Qt的文档,我看到他们在谈论QGraphicsItem
可以有children的事实,但为什么我在这里没有看到child?
PS:我尝试以 3 种不同的方式添加 child,但没有成功:
- 将 parent 传递给构造函数(如上所示)
- 在 child 上调用
setParentItem
并传递 parent 的指针
- 调用 parent 的
childItems()
,然后调用 push_back
或 append
并将 child 的指针传递给它
make_unique 在这里不起作用。当您在 Qt 中将一个对象添加到父级时,您已经传递了所有权。问题是你 也 有一个 unique_ptr 拥有它。一旦超出范围,它就会删除您的对象。请改用新的。
auto graphicsView = new QGraphicsView();
auto scene = new QGraphicsScene();
graphicsView->setScene(scene);
auto parent1 = new QGraphicsRectItem(0, 0, 100, 200);
parent1->setBrush(QBrush(QColor(Qt::cyan)));
scene->addItem(parent);
auto subRect1 = new QGraphicsRectItem(10, 10, 50, 50, parent1);
subRect1->setBrush(QBrush(QColor(Qt::yellow)));
(这不是完全的异常证明,但 Qt 并不是为使用异常而设计的。例如,您可以使用 make_unique 制作场景,然后使用 release() 将其传递给 graphicsView,但实际上没有人用 Qt 这样做过。)
我有以下代码,其中我尝试有两个矩形,然后在每个矩形内显示 "sub" 个矩形(这是一个 parent 和一个 child)
auto graphicsView = std::make_unique<QGraphicsView>();
auto scene = std::make_unique<QGraphicsScene>();
graphicsView->setScene(scene.get());
auto parent1 = std::make_unique<QGraphicsRectItem>(0, 0, 100, 200);
parent1->setBrush(QBrush(QColor(Qt::cyan)));
scene->addItem(parent);
auto subRect1 = std::make_unique<QGraphicsRectItem>(10, 10, 50, 50, parent1);
subRect1->setBrush(QBrush(QColor(Qt::yellow)));
我的例外是,当我显示 QGraphicsView
时,我会看到一个青色矩形 (parent1
),在其顶部我还会看到一个黄色的小矩形 (subRect1
), 但我只能看到青色的。
查看Qt的文档,我看到他们在谈论QGraphicsItem
可以有children的事实,但为什么我在这里没有看到child?
PS:我尝试以 3 种不同的方式添加 child,但没有成功:
- 将 parent 传递给构造函数(如上所示)
- 在 child 上调用
setParentItem
并传递 parent 的指针 - 调用 parent 的
childItems()
,然后调用push_back
或append
并将 child 的指针传递给它
make_unique 在这里不起作用。当您在 Qt 中将一个对象添加到父级时,您已经传递了所有权。问题是你 也 有一个 unique_ptr 拥有它。一旦超出范围,它就会删除您的对象。请改用新的。
auto graphicsView = new QGraphicsView();
auto scene = new QGraphicsScene();
graphicsView->setScene(scene);
auto parent1 = new QGraphicsRectItem(0, 0, 100, 200);
parent1->setBrush(QBrush(QColor(Qt::cyan)));
scene->addItem(parent);
auto subRect1 = new QGraphicsRectItem(10, 10, 50, 50, parent1);
subRect1->setBrush(QBrush(QColor(Qt::yellow)));
(这不是完全的异常证明,但 Qt 并不是为使用异常而设计的。例如,您可以使用 make_unique 制作场景,然后使用 release() 将其传递给 graphicsView,但实际上没有人用 Qt 这样做过。)