2015-05-19 61 views
0

我正在開發一個小型無人機的地面控制站,在那裏我試圖添加一個函數來從文件加載航點。 每個航點都是QGraphicsScene上的QGraphicsItem如何高效地創建大量的QGraphicsItem?

然而,當有文件中超過100點,創造需要2秒以上...

有什麼辦法更快地做到這一點?

+0

你需要這個類還是你可以簡單地使用一對X/Y座標? – duDE

+0

我需要它,因爲航點需要編輯... – Nyaruko

+0

也許你可以使用QGraphicsItemGroup(http://doc.qt.io/qt-4.8/qgraphicsitemgroup.html):QGraphicsItemGroup類提供了一個容器,它可以處理一組物品作爲一個單一的項目... – duDE

回答

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)非常酷,它如何處理所有內容。

希望有所幫助。

相關問題