带自动布局的QGraphicsView

3 投票
3 回答
2118 浏览
提问于 2025-04-15 14:55

我想用QGraphicsView写一个资产浏览器。这和一般用QGraphicsView和QGraphicsItems的例子有点不同,因为我只想要一个滚动条,并且希望当视口大小变化时,项目能自动移动。比如,当视口的宽度足够大,可以显示4个资产时,它们应该这样显示:

aaaa
aaaa
aa

但是当视口缩小,只能容纳3个在一行时,它们应该这样显示:

aaa
aaa
aaa
a

我不想自己去移动这些资产,而是希望图形视图能自动管理它们。这样做有可能吗?

我之前写过类似的东西,但那是用QWidget和paintEvent自己绘制所有资产,并且要自己记录一行能显示多少资产。用QGraphicsView能不能更简单一些呢?

3 个回答

-2

我会使用自定义布局来实现这个功能。你可以尝试创建一个自己的布局类,这个类要从QGraphicsLayout继承,然后管理它放置物品的方式。

1

听起来你想要的是一个列表,而不是图形视图。列表可以设置成像你想要的那样,内容可以自动换行。你可以看看这个拼图示例,注意左边的拼图块列表。对于这个情况,设置起来看起来非常简单。

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

6

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

对于你需要的布局,可以看看Qt中的流式布局示例。把那个示例转换一下,就能得到一个QGraphicsFlowLayout。把你的QGraphicsItems添加到这个布局中,然后把你的QGraphicsView的布局设置为这个布局,这样就可以了。

撰写回答