簡體   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