如何有效地创建大量的QGraphicsItem?

时间:2015-05-19 14:59:18

标签: qt qgraphicsitem qgraphicsscene

我正在为一架小型无人机开发一个地面控制站,我正在尝试添加一个从文件加载航点的功能。 每个航点都是QGraphicsItem上的QGraphicsScene

但是,当文件中有超过100个点时,创建时间超过2秒......

有没有办法更快地做到这一点?

1 个答案:

答案 0 :(得分:2)

40K Chips示例显示了具有大量元素的场景的填充。

http://doc.qt.io/qt-5/qtwidgets-graphicsview-chip-mainwindow-cpp.html

void MainWindow::populateScene()
{
    scene = new QGraphicsScene;

    QImage image(":/qt4logo.png");

    // Populate scene
    int xx = 0;
    int nitems = 0;
    for (int i = -11000; i < 11000; i += 110) {
        ++xx;
        int yy = 0;
        for (int j = -7000; j < 7000; j += 70) {
            ++yy;
            qreal x = (i + 11000) / 22000.0;
            qreal y = (j + 7000) / 14000.0;

            QColor color(image.pixel(int(image.width() * x), int(image.height() * y)));
            QGraphicsItem *item = new Chip(color, xx, yy);
            item->setPos(QPointF(i, j));
            scene->addItem(item);

            ++nitems;
        }
    }
}

如果你在这里有很多初始化代码,那么可能需要很长时间。如果加载速度很慢,您可能需要查看QGraphicsItem的子类化。这里的自定义项目中的详细信息级别(请参阅chip.cpp)非常酷,它如何处理所有内容。

希望有所帮助。