QGraphicsView自动放置物品

时间:2009-10-08 14:48:48

标签: python qt pyqt qgraphicsview

我想使用QGraphicsView编写资产浏览器。它与使用QGraphicsView和QGraphicsItems的示例略有不同,因为我只想要一个滚动条,并且我希望项目在视口大小更改时自动移动。例如,当视口宽度足够大以显示4个asssets时,它们应显示如下:

aaaa
aaaa
aa

但是当视口缩小并且连续只能包含3时,它应该像这样显示:

aaa
aaa
aaa
a

我不想自己移动这些资产,让图形视图管理它们。这有可能吗?

我曾写过一次这样的事情,但是使用QWidget和paintEvent,自己绘制所有资产并跟踪可以连续显示的资产数量。使用QGraphicsView可以更简单吗?

3 个答案:

答案 0 :(得分:5)

QGraphicsView支持布局。你要做的是实现你自己的布局管理器,继承自QGraphicsLayout。

对于您需要的布局,请查看Qt的Flow Layout示例。转换该示例将为您提供QGraphicsFlowLayout。将QGraphicsItems添加到此布局并将QGraphicsView的布局设置为该布局,这样就可以了。

答案 1 :(得分:1)

听起来我想要一个列表,而不是图形视图。可以设置一个列表来显示您想要的东西。请参阅puzzle example,注意左侧的拼图列表。设置案例看起来非常简单。

当然,如果你真的想在图形视图中使用它,我想你可以在视图中添加一个列表并在那里使用它。

答案 2 :(得分:0)

我会使用自定义布局来执行此操作。尝试创建继承自QGraphicsLayout的自定义Layout类,并管理它放置项目的方式。