【问题标题】:QGridLayout vs QHBoxLayout & QVBoxLayoutQGridLayout 与 QHBoxLayout & QVBoxLayout
【发布时间】:2012-09-20 23:14:05
【问题描述】:

我最近回到了 Qt(在以前的项目中尝试过它并选择了反对它)并且到目前为止我真的很喜欢它的一切。我正在编写一个电视指南风格的应用程序,它将显示 3-7 天的任何地方的剧集指南数据 (EPG),并且这些数据将从数据库源中输入。

现在我很难确定是否应该使用 QGridLayout 或 QHBoxLayouts 的组合(用于剧集数据)和左侧的单个 QVBoxLayout(用于频道名称/图标)。我对 QGridLayout 的主要担心是我会将它分成“30 分钟”的块,但是当程序在 3:45 开始时,我不确定它是否能正常工作。为了更好地了解我使用 GUI 的目的,可以查看此屏幕截图...

http://www.itvt.com/files/u3/AT&T-u-verse-tv-epg-2009.jpg

顺便说一句,如果我只想显示其中的一部分(即凌晨 3:00 - 凌晨 4:30)并说 10 个频道,使用哪个选项更容易实现垂直/水平滚动?对于这种行为,我是否需要将它们粘贴在不同的小部件中?

【问题讨论】:

    标签: c++ qt layout gridview widget


    【解决方案1】:

    使用 QGridLayout。

    解释:

    使用 QVBoxLayout 和 QHBoxLayout,每行的列数不是固定的(或者如果您以其他方式使用这些布局,则相反),例如,您可以有类似的东西:

    |----------------------|
    |------|------|--------|
    |----------|-----------|
    

    如果您将一个项目添加到一行,该行将重新布局而不会干扰其他行,因此列不再对齐。对于某些 GUI 来说确实很方便,但对于你想要的,我认为它不实用。

    然后你有 QGridLayout这是你的 GUI 的方式:所有的列都是对齐的。因此,您可以将网格划分为 15 分钟的列,然后将小部件跨越几列。示例:

    0    15   30   45   60   75   90
    |----|----|----|----|----|----| 6 x 15 min episodes
    |---------|-------------------| 30 min + 1 hour episodes
    |-----------------------------| 1h30 episode
    |----|---------|---------|----| 2 x 15 min + 2 x 30 min episodes
    

    对齐是自动的。

    注意:如果使用 QVBoxLayout 和 QHBoxLayout,前面的例子应该是(没有具体代码):

    0    15   30   45   60   75   90
    |----|----|----|----|----|----|
    |--------------|--------------|
    |-----------------------------|
    |------|-------|-------|------|
    

    注意一行中的所有单元格如何具有相同的大小。这可以更改,但需要您手动处理单元格大小...

    【讨论】:

    • 很好的答案,非常感谢您提供的图表,因为它们帮助完美地解释了这个场景。
    【解决方案2】:

    我推荐 QGridLayout,因为它比使用一堆 QBoxLayout 更容易对齐所有内容。使用 QGridLayout,您的 addWidgetaddLayout 方法有一个可选的 columnSpan,您可以充分利用它。例如,您可以将每列设为 15 分钟,因此 45 分钟的节目将跨越 3 列。

    您通常不会使用 QLayouts 实现滚动。我不推荐它。相反,您可以将 QGridLayout 的 rowMinimumHeightrowMaximumHeight 设置为相同的值,这样您就可以确保每一行的高度相同,然后对列执行相同的操作。然后,您可以将布局(和封装小部件)放入 QAbstractScrollArea 并将滚动条的步长设置为行高和列高,这样当您滚动时,它会从通道到通道和时间段到时间段,而不是而不是连续滚动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多