【问题标题】:How to hide all the Items created in one particular loop in Qt?如何隐藏在 Qt 的一个特定循环中创建的所有项目?
【发布时间】:2016-08-01 06:46:00
【问题描述】:

我已经使用 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是我创建的一个item类。由于是循环,我不知道怎么改*new_item指针名,所以所有item都同名。)

【问题讨论】:

  • 您是否将项目组添加到场景中?该组是否可见?
  • 我会马上检查的。谢谢!
  • @Fabio,您好 Fabio,抱歉回复晚了。我找不到将组添加到场景的功能。我浏览了图书馆,我只能找到scene->createitemgroup 或QGraphicsItemGroup::addToGroup。 QGraphicsItemGroup:: 下可以使用的函数很少。但是,我知道如何将组设置为可见。
  • QGraphicsItemGroup 派生自 QGraphicsItem,您可以将其作为任何其他项目添加到场景中(QGraphicsScene::addItem)
  • @Fabio 您应该创建一个答案,Sehn Tian 应该接受它。 (基于 cmets)。这将产生一个有答案的问题,问题就解决了。

标签: c++ qt qgraphicsitem itemgroup


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2018-05-22
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多