如何在Qt中隐藏在一个特定循环中创建的所有项目

How to hide all the Items created in one particular loop in Qt?

本文关键字:创建 循环 项目 隐藏 Qt 一个      更新时间:2023-10-16

我已经使用Qt Creator将近一个月了。我希望这不是一个愚蠢的问题,因为它困扰了我很长时间。

我想实现:

    1. QGraphicsScene中创建许多不同的项目(比方说每秒20个)
    1. 对所有这些项目使用一个类
    1. 标记所有这些项目,在触发信号时删除或隐藏它们

在尝试了很多方法之后,我认为最好的方法是使用QGraphicsItemGroup。我试着把它们全部组合成一个QGraphicsItemGroup。但在将一个项目添加到一个组中后,无论我使用库中的什么功能,该项目都不会再出现在场景中。

我在使用QGraphicsItemGroup时有没有做错什么?或者还有其他更好的方法吗?

期待任何人的帮助。真的很感激。

下面是我的代码结构:

// ......
QGraphicsItemGroup *myItemsGroup = new QGraphicsItemGroup
timer->start(100);
connect(timer,SIGNAL(timeout()),this,SLOT(draw_trail()));
// ......
void MyFunction::draw_trail()
{
    Trail_item *new_item = new Trail_item;
    scene->addItem(new_item);
    new_item->setX(COPX-7);    
    new_item->setY(COPY-7);
    new_item->setZValue(5);
    /* 
    then I started trying add to group
    //myItemsGroup->addToGroup(new_item)
    after adding this line, the item vanishes.
    */
}

(注意:trail_item是我创建的一个项类。由于它是一个循环,我不知道如何更改*new_item指针名称,所以所有项都有相同的名称。)

确保已在场景中添加QGraphicsItemGroup,并且QGraphicsItemGroup可见。

您可以使用方法QGraphicsScene::addItem(QGraphicsItem*)QGraphicsItemGroup添加到场景中,就像任何其他QGraphicsItem一样