Qt 删除单个项目/QLineF';来自QsScene的s

Qt 删除单个项目/QLineF';来自QsScene的s,qt,drawing,qgraphicsscene,Qt,Drawing,Qgraphicsscene,我已使用QLineF将网格绘制到qgraphicscene中,您可以将自定义qgraphicsitems作为网格中的块添加到场景中。我希望能够用不同的间距和索引重新绘制网格(索引只是更粗的线) 我的问题是我不知道如何删除这些线。我可以从场景中删除所有内容,但这需要太多的工作,因为我必须将所有自定义项复制到一个数组中,然后将它们重新添加到场景中。我试着把指针列成一个列表,但是我不能删除指针。我还考虑将行作为子行添加到qgraphicsitem中,并删除该项,这将导致删除所有行,但不能将父行设置为行

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

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

如何从
qgraphicscene
中删除特定的行组件


像这样:
场景->移除项目(…指针..)我错误地将
场景->添加项(…)
的结果捕获为对象,然后将其存储为引用(&C)。当我将结果存储为指针时,我可以再次操作该项。

您可以使用QGraphicsSiteMgroup-,类似于

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);
    }
}
void Grid::addVerticalLineAt(qreal xCoord)
{
QRectF scen直立=场景()->scen直立();
QGraphicsLineItem*line=scene()->addLine(xCoord,mapFromScene(scen竖立.top()),xCoord,mapFromScene(scen竖立.bottom());
(QGraphicsSiteMgroup*)(此->网格线)->添加到组(线);
}
无效网格::刷新(qreal p_比例)
{
删除此->网格线;//删除下面的所有线
gridLines=new QGraphicsItemGroup(this);//在开始调用addXXXLineAt之前构造this
qreal间距=基本间距*p_刻度;
for(qreal curXCoord=scen直立.left();curXCoord
。。。应该有用


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

“…但我无法删除指针。”为什么?当您使用
qgraphicscene::addLine(…)
时,它会返回一个指向该行的指针,您正在使用它吗?我创建一个QLineF对象,然后再创建一个指向该对象的指针,我将它推回一个向量。我想使用返回的指针也是一样的?当稍后我遍历向量时,我尝试如下删除它:
QLineF*grab=linevector.at(I);删除抓取;grab=NULL我很困惑,你是如何通过场景的addLine()函数将
QLineF
s引入场景的。但这是否是一个可行的概念,如果我终止线条,场景会识别并删除它,还是会崩溃?如果我理解正确:两者都不会
QGraphicsLineItem
包含一个
QLineF
,因此当您使用
qgraphicscene::addLine(…)
创建一个项目时,行数据只会复制到其中。但是,如果删除
QGraphicsLineItem
,它将从场景中删除自身。