我有以下代码,我试图有两个矩形,然后在每个内部,显示" sub"矩形(这是一个父母和一个孩子的代码)
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
可以生孩子的事实,但为什么我没有在这里看到孩子呢?
PS:我尝试以3种不同的方式添加孩子,但没有运气:
setParentItem
并传递父母的指针childItems()
,然后push_back
或append
,并将孩子的指针传递给答案 0 :(得分:3)
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做过。)