【问题标题】:Adjusting widget size in QGraphicsGridLayout在 QGraphicsGridLayout 中调整小部件大小
【发布时间】:2016-06-02 12:58:37
【问题描述】:

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

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

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

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

所以我的问题是:

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

【问题讨论】:

    标签: python c++ qt qt4 pyqt4


    【解决方案1】:
    1. 有没有更好的方法来制作小部件的层次结构,我目前的似乎过度(场景>小部件>布局>小部件)

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

    1. 使不同大小的小部件具有相同大小的最佳方法是什么(这样它们在网格中的大小都将相同且不会重叠)?

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

    1. 我的主要 QGraphicsWidget(在其上显示网格)没有占据视图的整个宽度,实现这一点的最佳方法是什么?

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

    1. 如何让我的 QGraphicsGrid “响应”?

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

    【讨论】:

    • 如果我想改变不同大小的列号,我自己实现网格是我最好的选择吗?非常感谢,很难找到这些具体问题的答案。
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多