gpt4 book ai didi

qt - 从 QGraphicsScene 中删除单个项目/QLineF

转载 作者:行者123 更新时间:2023-12-01 05:28:54 33 4
gpt4 key购买 nike

我已将网格绘制成 qgraphicssceneQLineF的,您可以添加自定义 qgraphicsitems作为网格中的块进入场景。我希望能够以不同的间距和索引重新绘制网格(索引只是较粗的线)。

我的问题是我不知道如何删除线条。我可以从场景中删除所有内容,但这需要太多的工作,因为我必须将所有自定义项目复制到一个数组中,然后将它们重新添加到场景中。我尝试将指针列表放入行中,但无法删除指针。我还考虑将这些行作为 child 添加到 qgraphicsitem并删除该项目,这将导致删除所有行,但您不能为这些行设置父项。

如何从 QGraphicsScene 中删除特定的线路组件?

像这样:scene->removeItem(..pointer..);我错误地捕捉到 scene->addItem(..) 的结果作为一个对象,然后将其存储为 &reference。当我将结果存储为指针时,我能够再次操作该项目。

最佳答案

您可以使用 QGraphicsItemGroup - http://qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html , 就像是...

void Grid::addVerticalLineAt(qreal xCoord)
{
QRectF sceneRect = scene()->sceneRect();
QGraphicsLineItem* line = scene()->addLine(xCoord, mapFromScene(sceneRect.top()), xCoord, mapFromScene(sceneRect.bottom()));
(QGraphicsItemGroup*)(this->gridLines)->addToGroup(line);
}
void Grid::Refresh(qreal p_Scale)
{
delete this->gridLines; //deletes all lines underneath
gridLines = new QGraphicsItemGroup(this); //construct this _before_ you start calling addXXXLineAt
qreal spacing = BASIC_SPACING * p_Scale;
for(qreal curXCoord = sceneRect.left(); curXCoord < sceneRect.right(); curXCoord += spacing) //each spaced point in scenerect
{
addVerticalLineAt(curXCoord);
}
}

... 应该管用。

另一种方法是添加另一个名为 Grid 的 QGraphicsItem,并通过在 QGraphicsLineItem ctor 中设置父项来将所有 QLineF 分配给该项目。

关于qt - 从 QGraphicsScene 中删除单个项目/QLineF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480750/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com