我有一個包含許多QGraphicsItem專案(大約 25000 個專案)的場景,當我隱藏無用專案時,如何獲取所有可見專案邊界框,以便我可以fitInView在視圖中心使用確保可見專案。
我的場景

想要得到可見的專案邊界框

uj5u.com熱心網友回復:
我認為沒有任何功能可以限制僅獲取可見專案的矩形。我會使用蠻力,遍歷所有可見專案并計算總邊界矩形。例如,看看QGraphicsScene::itemsBoundingRect()這里的實作https://code.woboq.org/qt5/qtbase/src/widgets/graphicsview/qgraphicsscene.cpp.html#_ZNK14QGraphicsScene17itemsBoundingRectEv并添加可見性檢查。
QRectF visibleItemsBoundingRect() const
{
QRectF boundingRect;
const auto items_ = items();
for (QGraphicsItem *item : items_)
{
if (item->isVisible()) // Note: this line was added to original implementation
boundingRect |= item->sceneBoundingRect();
}
return boundingRect;
}
如果由于大量不可見專案而導致這種蠻力性能不令人滿意,那么您可能應該在某處保留一些僅可見專案的串列,但您需要小心維護它并在每次顯示或隱藏或添加或洗掉時更新它任何到現場。然后,您可以更快地迭代如此小的專案串列。但是除非蠻力方法的性能真的很差,否則我不會走這條路。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482823.html
標籤:qt pyqt qgraphicsview qgraphics场景
上一篇:Python在類外獲取引數
