Qt QGridLayout自动将项目居中对齐。

12

我的表单上有一个QHBoxLayout,其中添加了3个布局。第二个布局包含我提问相关的项目。

我在主布局(QHBoxLayout)的第二个窗格上有一个QVBoxLayout。这个QVBoxLayout添加了一个QScrollArea并使用addWidget进行了添加。

这个QScrollArea是名为 "scrollContents" 的QWidget的父级,后者包含一个QGridLayout

我正在将自定义创建的小部件添加到这个QGridLayout中,其高度固定。我们现在可以将其视为100px

如果此QGridLayout具有高度总和小于表单本身的项,则会垂直居中这些小部件,并在它们之间保留相同的空间。

如果只有一个小部件,则它会出现在正中间。但我想让它们从上到下列出。

例如:[###代表QScrollArea的区域,其中有一个带有QGridLayoutQWidget

   OK      ->   DESIRED    -> NOT DESIRED AND WHAT HAPPENS
##########    ##########               ##########
# |item| #    # |item| #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               # |item| #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
##########    ##########               ##########
  |item|
  |item| 
  |item|

基本上:如果有9个“行”的空间,当添加一个单一的项目时,它将出现在第5个位置的中间。如果有9个或更多的项目,则它们会按照应有的位置显示。如果有8个或更少的项目,则它们之间的空间将扩大以使它们全部居中。

我该如何解决这个问题?

谢谢。

3个回答

18

QGridLayout::addWidget()有一个alignment参数。下面的代码对我有效:

gridLayout->addWidget(new QPushButton("Button"), 0, 0, Qt::AlignTop);

它像魔法一样奏效!唯一的问题是,它不尊重setContentMargins()参数。我会去找它,但如果你也有经验,我会非常感激的,谢谢!;-) - Phil
很奇怪,因为我尝试了 gridLayout->setContentsMargins(50, 50, 50, 50);,它确实起作用了。 - Oleg Shparber
你是对的。我有一些有限的软件文本功能,可以自动添加、删除、重新添加随机数量的小部件,但我在编码时出现了错误。所以你说得完全正确。这段代码确实能够完成它应该完成的任务,但当需要添加和删除更多内容时就会出现问题。所以如果你不介意的话,我会选择另一个帖子作为答案,因为在我的情况下它更加稳定。然而,我会记住你的建议,并在必要时使用它,所以我真诚地感谢你!干杯!;-) - Phil
在PyQt中,从PyQt5.QtCore导入*,grid.addWidget(imgLabel, 0, 0, Qt.AlignTop) - Vladimir Stazhilov

9

你好@Synxis!感谢回复。我会记住并将其放入我的工具箱以备将来参考。;-) 再次感谢! - Phil
不用谢。别忘了,你不仅可以用它来制作工具栏,还可以解决你在QGridLayout中遇到的问题! - Synxis
1
你好,@Synxis。我已经进行了各种测试并阅读了Qt的一些文档。我相信你提出的这种方法是更好的解决方案。因为:如果添加的项目不多,它可以工作。如果删除项目,它也可以工作。如果重新添加项目,它也可以工作。因此,我选择了你的答案作为答案。我希望它能帮助未来的其他人。如果你不介意的话,也许你可以编辑一下你的消息,用代码引用来解释一下链接问题中所写的内容。再次感谢。 - Phil

1

在底部使用垂直间距,这就是它们的作用。


1
我对你的解决方案很感兴趣,但是GridLayout中的spacer是什么? GridLayout没有像QHBoxLayout和QVBoxLayout中的addStretch()方法这样的方法。 - Seth D. Fulmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接