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
,它将从场景中删除自身。