2

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

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

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

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

4

2 回答 2

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
|----|----|----|----|----|----|
|--------------|--------------|
|-----------------------------|
|------|-------|-------|------|

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

于 2012-09-29T10:48:42.837 回答
0

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

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

于 2012-09-29T10:52:59.623 回答