繁体   English   中英

从Qgraphicsscene中删除自定义Qgraphicsitem的问题

[英]Problems removing custom Qgraphicsitem from Qgraphicsscene

我已经将Qgraphicsscene和Qgraphicsitem分类,似乎它有效,但尝试通过子类识别删除项目不起作用。 这删除项目:

void debugSceneItemscuatrobis()
{
    QList<QGraphicsItem *> allitems = items();
        foreach(auto item, allitems) {
            removeItem(item);
        }
    }

但事实并非如此,它承认有些物品但不会移除它们,尝试不同的拥有但却无法使其有效。

void debugSceneItemscuatrotris()
{
    QList<QGraphicsItem *> allitems = items();
        foreach(auto item, allitems) {
        if(item->type() == chord::Type) {
            removeItem(item);
            delete item;
         }
        }
    }

这就是qgraphicsitem子类添加项目的方式:

void chord::addchord(QPointF sp)
{
    scene()->addLine(sp.x(), sp.y(), sp.x()+10, sp.y()+10);
        QList<int> midics = {10, 30, 40};
      for(int i = 0; i < midics.length(); i++)
          {
        QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n");
        item->setFont(QFont("omheads", 20));
        item->setPos(sp.x(), sp.y()+midics[i]);
        scene()->addItem(item);
        coso.append(item);
      }
}

对不起,我是新手,没有程序员,这些是我的第一个子类。 有人知道如何接近它吗? 谢谢。 :-)

没有看到更多的代码,我只是在猜测。 但是那个猜测就是当你删除一个chord类型的项目时,你仍然可以看到在chord::addchord中添加到场景中的各种QGraphicsItem 如果是这样,可能是因为chord与那些项之间缺少任何父/子关系:来自QGraphicsScene::removeItem(item)的文档......

从场景中删除项目及其所有子

尝试通过更改chord:addchord显式创建父/子关系chord:addchord实现到...

void chord::addchord (QPointF sp)
{
    auto *line = scene()->addLine(sp.x(), sp.y(), sp.x() + 10, sp.y() + 10);
    line->setParentItem(this);
    QList<int> midics = { 10, 30, 40 };
    for (int i = 0; i < midics.length(); i++)
    {
        QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n", this);
        item->setFont(QFont("omheads", 20));
        item->setPos(sp.x(), sp.y() + midics[i]);
        scene()->addItem(item);
        coso.append(item);
    }
}

它可能无法解决所有问题,但应该(希望)引导您朝着正确的方向前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM