Qt-在QGraphicsScene中只编辑QGraphicsLineItems

Qt - Edit just QGraphicsLineItems within a QGraphicsScene

本文关键字:编辑 QGraphicsLineItems QGraphicsScene Qt-      更新时间:2023-10-16

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

我知道如何将它们从视线中移除,但问题是如何找到场景视图中哪些QGraphicsItems是线,哪些不是线。

我试过使用

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还很陌生,最近几天我一直在学习。有人能帮忙吗?

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

相反,只要创建了一行,就将其添加到列表中。当它们需要隐藏时,遍历列表并隐藏它们。它占用的内存略多,但速度更快、更安全,并且需要更少的编码。