我试图在一个QGraphicsView和qgraphicscene上用自定义的QGraphicsWidgets创建一个网格,但是我不确定最好的方法是什么。我在用PyQt4,但这是一个一般的Qt问题。在
我当前的实现包含以下内容。一个qgraphicscene(带视图)和一个QGraphicsWidget,其中包含我在其中插入自定义小部件的QGraphicsGridLayout。在
我遇到的问题是,每个自定义小部件都有不同的大小,它们重叠在一起,我不确定如何分别更改每个小部件的大小。此外,网格需要是“响应”的,即如果小部件是某个宽度,那么应该有3列,但是如果小部件较小,则应该只显示2列。在
我读过通过实现大小提示可以解决这个问题,但是我还没有找到关于这个主题的任何好的文档。在
所以我的问题是:
当我使用
QGraphics....
类时,我通常会子类QGraphicsView
。视图将创建它自己的场景,并有方便的方法来创建所有子项。从api的角度来看,只有视图小部件是真正公开的。在这取决于它们是什么类型的小部件。如果它们是images/pixmap,您可以将它们缩放到一定的大小。如果它们是带有控件的实际小部件,您可能不想缩放它们,而应该使用
setGeometry
设置它们的实际高度/宽度。否则,所有QGraphicsItem
都支持缩放。在在视图中,您可以获得}的大小。在
.viewport()
大小,然后将图形小部件的大小设置为视口的大小。您必须重写QGraphicsView
上的resizeEvent
,以便在视图大小调整时调整{为此,最好不要使用网格,也不要手动计算图形场景中每个项目的位置。这在某种程度上取决于你想如何放置物品。一些小部件应该在其他部件的下面还是旁边?你只想要一个紧凑的网格吗?一个项目可以跨越两条网格线吗?所有的东西都必须放在一个“页面”上,还是允许垂直滚动。在你得到好答案之前,你必须先回答这些问题。但一般来说,您知道视口的大小。如果您有一个图形项列表,您可以迭代它们,并根据已经放置的项设置它们的位置。同样,重写图形视图上的
resizeEvent
,这样每当视图调整大小时,您都可以重新计算项目位置。在相关问题 更多 >
编程相关推荐