2012-09-13 46 views
1

我正在使用Qt来绘制一些数据可视化。我有一些线条表示时间轴上的某些重要点,但我希望能够从视图中删除这些线条,以便下方的信息更清晰可见。Qt - 在QGraphicsScene中编辑QGraphicsLineItems

我明白如何将它们从视线中移除,但问题是如何在场景视图中查找哪些QGraphicsItem是线条,哪些不是。

我一直在使用

try { 
    qgraphicsitem_cast<QGraphicsLineItem>(scene->items()[i]); 
} catch (...) { 
} 

试图但这并不甚至编译。我试着检查qgraphicsitem_cast()的输出是否为0,但编译器也不喜欢这样。

这是我最当前的代码:

void Plotter::showHideLines() { 
    int i; 
    QGraphicsLineItem l; 

    for (i = 0; i < scene->items().count(); i++) { 
     try { 
      qgraphicsitem_cast<QGraphicsLineItem>(scene->items()[i]); 
      scene->items()[i]->setVisible(!scene->items()[i]->isVisible()); 
     } catch (...) { 
     } 
    } 
} 

忽略“L”,我没有打扰尝试别的东西之后将其删除。

我对Qt很新,我刚刚在过去几天里学习它。任何人都可以帮忙吗?

+1

你为什么要尝试删除线?不吸引他们不容易吗?尝试在QGraphicsView中擦除可能比你想象的有更多的背景时被认为更难... – Uflex

+1

嗯,我想要让它们可见或不可见的选项。他们需要在那里,他们向用户提供信息。 – Luke

回答

1

我不会建议迭代每个场景项目,只是为了隐藏某种类型,因为当项目数量变大时,事情会变得缓慢。

相反,无论何时创建一行,都将其添加到列表中。当他们需要隐藏时,遍历列表并隐藏它们。它需要稍微更多的内存,但速度更快,更安全,并且需要更少的编码。

+0

完成此操作。谢谢。 – Luke