【问题标题】:Problems removing custom Qgraphicsitem from Qgraphicsscene从 Qgraphicsscene 中删除自定义 Qgraphicsitem 的问题
【发布时间】:2019-08-11 11:31:34
【问题描述】:

我已经对 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);
      }
}

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

【问题讨论】:

    标签: qt qt5 qgraphicsscene qgraphicsitem


    【解决方案1】:

    没有看到更多你的代码,我只是在猜测。但是这种猜测是,当您删除 chord 类型的项目时,您仍然能够看到在 chord::addchord 中添加到场景中的各种 QGraphicsItems。如果是这样,可能是由于chord 和这些项目之间缺乏任何父/子关系:来自QGraphicsScene::removeItem(item) 的文档...

    从场景中移除项目 item 及其所有子项。

    尝试通过将 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);
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多