带有自动放置项目的QGraphicsView

问题描述 投票:3回答:3

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

aaaa
aaaa
aa

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

aaa
aaa
aaa
a

我不想独自移动这些资产,而让图形视图管理所有资产。有可能吗?

我曾经写过这样的一篇文章,但是使用QWidget和paintEvent,自己绘制了所有资产并跟踪了可以连续显示多少资产。使用QGraphicsView可以更简单吗?

python qt pyqt qgraphicsview
3个回答
5
投票

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

对于所需的布局,请查看Qt的Flow Layout示例。转换该示例将为您提供QGraphicsFlowLayout。将您的QGraphicsItems添加到此布局中,然后将QGraphicsView的布局设置为该布局,就可以解决问题。


1
投票

在我看来,您需要列表,而不是图形视图。可以设置一个列表来显示您想要的东西。参见puzzle example,注意左侧的拼图列表。为所展示的案例进行设置看起来非常简单。

当然,如果您确实希望在图形视图中使用它,我想您可以在该视图中添加一个列表并在其中使用。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.