如何高效创建大量的QGraphicsItem?
How to efficiently create a large amount of QGraphicsItem?
我正在为小型无人机开发地面控制站,我试图在其中添加一个函数以从文件加载 waypoints。
每个航路点都是 QGraphicsScene
上的一个 QGraphicsItem
。
但是,当文件中有超过100个点时,创建时间超过2秒...
有什么方法可以更快地做到这一点?
40K 芯片示例展示了具有大量元素的场景的总体。
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)处理所有内容的方式非常酷。
希望对您有所帮助。
我正在为小型无人机开发地面控制站,我试图在其中添加一个函数以从文件加载 waypoints。
每个航路点都是 QGraphicsScene
上的一个 QGraphicsItem
。
但是,当文件中有超过100个点时,创建时间超过2秒...
有什么方法可以更快地做到这一点?
40K 芯片示例展示了具有大量元素的场景的总体。
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)处理所有内容的方式非常酷。
希望对您有所帮助。