gpt4 book ai didi

python - 在 QGraphicsGridLayout 中调整小部件大小

转载 作者:行者123 更新时间:2023-11-28 05:39:01 25 4
gpt4 key购买 nike

我正在尝试使用自定义 QGraphicsWidgets 在 QGraphicsView 和 QGraphicsScene 上制作网格,但我不确定最好的方法是什么。我正在使用 PyQt4,但这是一个常见的 Qt 问题。

我当前的实现包含以下内容。一个 QGraphicsScene(带 View )和一个 QGraphicsWidget,其中包含我插入自定义小部件的 QGraphicsGridLayout。

我遇到的问题是这些自定义小部件中的每一个都有不同的大小,并且它们重叠,我不确定我将如何分别更改每个小部件的大小。此外,网格需要“响应式”,即如果小部件有一定宽度,则应有 3 列,但如果小部件较小,则应仅显示 2 列。

我读过这可能可以通过实现大小提示来解决,但我还没有真正找到关于该主题的任何好的文档。

所以我的问题是:

  1. 有没有更好的方法来制作小部件的层次结构,我目前的方法似乎过多(场景>小部件>布局>小部件)
  2. 将不同大小的小部件设置为相同大小的最佳方法是什么(这样它们在网格中显示的大小都相同并且不会重叠)?
  3. 我的主要 QGraphicsWidget(显示网格)没有占据整个 View 的宽度,实现此目的的最佳方法是什么?
  4. 我将如何使我的 QGraphicsGrid 具有“响应式”?

最佳答案

  1. Is there a better way to make the hierarchy of widgets, my current one seems excessive (Scene > Widget > Layout > Widgets)

当我使用QGraphics.... 类时,我通常会继承QGraphicsView。该 View 将创建它自己的场景,并具有创建所有子项的便捷方法。从 api 的角度来看,只有 View 小部件是真正公开的。

  1. What's the best way to make different sized widgets the same size (so they would all appear the same size in the grid and not overlap)?

这取决于它们是什么类型的小部件。如果它们是图像/像素图,您可以将它们缩放到特定大小。如果它们是带有控件的实际小部件,您可能不想缩放它们,而应该使用 setGeometry 设置它们的实际高度/宽度。否则,所有 QGraphicsItem 都支持缩放。

  1. My main QGraphicsWidget (on which the grid is displayed) doesn't take up the whole width of the view, what is the best way to achieve this?

在 View 上,您​​可以获得.viewport() 大小,然后只需将图形小部件的大小设置为视口(viewport)的大小即可。您必须覆盖 QGraphicsView 上的 resizeEvent,以便在 View 调整大小时也调整您的 QGraphicsWidgets 的大小。

  1. How would I go about making my QGraphicsGrid "responsive"?

为此,您最好不要使用网格并手动计算每个项目在图形场景中的位置。这在某种程度上取决于您希望如何放置元素。某些小部件是否应该位于其他小部件下方或旁边?你只想要一个紧凑的网格吗?一个项目可以跨越两条网格线吗?是否所有内容都必须适合单个“页面”,或者是否允许垂直滚动。在你得到任何好的答案之前,你必须先回答这些问题。但通常,您知道视口(viewport)的大小。如果您有一个图形项目列表,您可以遍历它们并根据您已经放置的项目设置它们的位置。再次覆盖图形 View 上的 resizeEvent,以便您可以在 View 调整大小时重新计算项目位置。

关于python - 在 QGraphicsGridLayout 中调整小部件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37592580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com