我最近又回到了Qt (在以前的项目中尝试过,并选择不使用它),到目前为止,我真的很喜欢它的一切。我正在编写一个电视指南风格的应用程序,将显示剧集指南数据(EPG)的任何地方从3-7天,这些数据将从一个数据库的来源。
现在我很难决定我应该使用QGridLayout还是QHBoxLayouts的组合(用于剧集数据),在左侧有一个QVBoxLayout (用于频道名称/图标)。我对QGridLayout的主要担心是我会把它分成“30分钟”的块,但是当程序在3:45启动时,我不确定它是否能正常工作。为了更好地了解图形用户界面的用途,可以在…中查看此屏幕截图
http://www.itvt.com/files/u3/AT&T-u-verse-tv-epg-2009.jpg
顺便说一句,如果我只想显示其中的一段(即3:00AM - 4:30AM),比如说10个通道,使用哪个选项更容易实现垂直/水平滚动?对于这种行为,我需要将它们放在不同的小部件中吗?
发布于 2012-09-29 18:48:43
使用QGridLayout。
解释:
对于QVBoxLayout和QHBoxLayout,每行的列数不是固定的(如果您以另一种方式使用这些布局,则相反),例如,您可以具有以下内容:
|----------------------|
|------|------|--------|
|----------|-----------|如果您将一个项目添加到行中,该行将重新布局,而不会与其他项目发生冲突,因此列不再对齐。对于某些GUI来说,这真的很方便,但对于您想要的,我认为它并不实用。
然后是QGridLayout,这是实现图形用户界面的方法:所有列都是对齐的。因此,您可以将网格划分为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-29 18:53:00
我推荐使用QGridLayout,因为与使用大量QBoxLayouts相比,它可以更容易地保持所有内容的对齐。使用QGridLayout,您的addWidget和addLayout方法有一个可选的columnSpan,您可以很好地利用它。例如,您可以将每个列设置为15分钟,因此45分钟的显示将跨越3列。
您通常不会使用QLayouts实现滚动。我不推荐这样做。相反,您可以将QGridLayout的rowMinimumHeight和rowMaximumHeight设置为相同的值,以便可以确保每行的高度相同,然后对列执行相同的操作。然后,您可以将布局(和封装小部件)放入QAbstractScrollArea中,并将滚动条的步长设置为行和列的高度,这样当您滚动时,它会从一个频道到另一个频道和从一个时间段到另一个时间段,而不是连续滚动。
https://stackoverflow.com/questions/12650674
复制相似问题