0
我正在開發一個小型無人機的地面控制站,在那裏我試圖添加一個函數來從文件加載航點。 每個航點都是QGraphicsScene
上的QGraphicsItem
。如何高效地創建大量的QGraphicsItem?
然而,當有文件中超過100點,創造需要2秒以上...
有什麼辦法更快地做到這一點?
我正在開發一個小型無人機的地面控制站,在那裏我試圖添加一個函數來從文件加載航點。 每個航點都是QGraphicsScene
上的QGraphicsItem
。如何高效地創建大量的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)非常酷,它如何處理所有內容。
希望有所幫助。
你需要這個類還是你可以簡單地使用一對X/Y座標? – duDE
我需要它,因爲航點需要編輯... – Nyaruko
也許你可以使用QGraphicsItemGroup(http://doc.qt.io/qt-4.8/qgraphicsitemgroup.html):QGraphicsItemGroup類提供了一個容器,它可以處理一組物品作爲一個單一的項目... – duDE