解决使用QGraphicsView QGraphicsScene默认显示居中的终极办法

QGraphicsView  网格元素的排布,实现如下自定义item

解决使用QGraphicsView QGraphicsScene默认显示居中的终极办法

 

正常情况如下,我们创建一个item,并添加到QGraphicsScene,元素显示在正中间,那么我们如何让他自动从上排到下呢?

QGraphicsItem* item = new QGraphicsItem    
item->setPos(x,y); //图元位于场景的中心
m_pListScene->addItem(item);
ui->graphicsView->setScene(m_pListScene);

1.设置left top 

ui->graphicsView->setAlignment(Qt::AlignLeft | Qt::AlignTop);

2.设置画布QGraphicsScene的大小,宽取graphicsView得width,高需要根据item数量动态计算,如果这里不设置高的画,那么有些元素将不被显示,也无法触发滚动条

m_pListScene->setSceneRect(0,0,sceneWidth,sceneHeight);

3.设置图元的相对与画布的位置,x,y是相对于画布原点(0,0)

item->setPos(x,y);

4.大功告成,这样即使你动态改变graphicsView的高度也没关系,item会自动排布一次。

 

学习QT一个多月,CSDN能查到的解决方案也并不合理,只能自己多看文档多尝试,希望这些对您也有帮助,欢迎留言共同探讨!