【问题标题】:Remove single items/QLineF's from QGraphicsScene从 QGraphicsScene 中删除单个项目/QLineF
【发布时间】:2013-03-15 17:39:26
【问题描述】:

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

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

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

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

【问题讨论】:

  • "...但我无法删除指针。"为什么?当您使用QGraphicsScene::addLine(..) 时,它会返回一个指向该行的指针,您在使用它吗?
  • 我创建了一个 QLineF 对象,然后创建了一个指向该对象的指针,然后将其推回向量。我想使用返回的指针会是一样的吗?后来我遍历向量时,我尝试像这样删除它:QLineF* grab = linevector.at(i); delete grab; grab = NULL;
  • 我很困惑,你是如何让QLineFs 进入现场的?
  • 通过场景的 addLine() 函数。但这甚至是一个可行的概念吗,如果我终止 LineF,场景会识别并删除它还是会崩溃?
  • 如果我理解正确:两者都不是。 QGraphicsLineItem 包含一个QLineF,因此当您使用QGraphicsScene::addLine(..) 创建一个时,行数据只是复制到其中。但是,如果您删除 QGraphicsLineItem,它将从场景中移除。

标签: qt drawing qgraphicsscene


【解决方案1】:

您可以使用 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 分配给该项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多