我最近回到了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点 - 凌晨4点半)并说10个频道,哪个选项可以更容易实现垂直/水平滚动?我是否需要将它们粘贴在不同的小部件中以实现该行为?
答案 0 :(得分: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
|----|----|----|----|----|----|
|--------------|--------------|
|-----------------------------|
|------|-------|-------|------|
注意一行中的所有单元格大小是否相同。这可以更改,但需要您手动处理单元格大小...
答案 1 :(得分:0)
我推荐使用QGridLayout,因为与使用大量QBoxLayout相比,它可以使所有对齐更容易。使用QGridLayout,您的addWidget
和addLayout
方法有一个可以使用的可选columnSpan
。例如,您可以将每列显示为15分钟,因此45分钟的节目将跨越3列。
您通常不会使用QLayouts实现滚动。我不推荐它。相反,您可以将QGridLayout的rowMinimumHeight
和rowMaximumHeight
设置为相同的值,以便您可以确保每一行的高度相同,然后对列执行相同的操作。然后,您可以将布局(和封装窗口小部件)放入QAbstractScrollArea,并将滚动条的步长设置为行高和列高,这样滚动时,它会从一个频道到另一个频道,从时间段到时间段,而不是而不是连续滚动。