C++ Qt QGridLayout自动将项目居中(移动)到中间。

C++ Qt QGridLayout自动将项目居中(移动)到中间。,c++,python,qt,qscrollarea,qgridlayout,C++,Python,Qt,Qscrollarea,Qgridlayout,我的表单上有一个QHBoxLayout,其中添加了3个布局。第二个是关于我的问题 我在主布局的第二个窗格上有一个QVBoxLayout(QHBoxLayout)。 此QVBoxLayout使用addWidget添加了QScrollArea 这个QScrollArea是名为“scrollContents”的QWidget的父级,它依次包含QGridLayout OK -> DESIRED -> NOT DESIRED AND WHAT HAPPENS ####

我的表单上有一个
QHBoxLayout
,其中添加了3个布局。第二个是关于我的问题

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

这个
QScrollArea
是名为“scrollContents”的
QWidget
的父级,它依次包含
QGridLayout

   OK      ->   DESIRED    -> NOT DESIRED AND WHAT HAPPENS
##########    ##########               ##########
# |item| #    # |item| #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               # |item| #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
# |item| #    #        #               #        #
##########    ##########               ##########
  |item|
  |item| 
  |item|
我正在向这个具有固定高度的
QGridLayout
添加一个自定义创建的小部件。现在我们可以考虑这个代码> 100px < /代码>。 如果此
QGridLayout
包含的项目的总高度小于表单本身,则它会垂直居中放置这些小部件,并在它们之间留出相同的空间

如果有一个小部件,它就出现在中间。但我希望他们从上到下列出

例如:[####表示
qscrollara
区域,其中有一个
QWidget
QGridLayout

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

基本上:如果有9个“行”的空间,当添加一个单独的项时,它出现在第五的中间位置。如果有9个或更多,它们就应该出现。如果有8个或更少,它们之间的空间就扩大到所有它们的中心。

我怎样才能解决这个问题

谢谢。

具有
对齐
参数。以下代码适用于我:

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

还有一种不同于trollixx回答的方法:在
QGridLayout
的“底部”添加一个虚拟小部件,其垂直大小策略设置为Expansing。请参见。

在底部使用垂直间隔符,这就是它们的用途。

它工作起来很有魅力!唯一的问题是,它不尊重setContentMargins()参数。我会寻找它,但如果你也有使用它的经验,我会非常感激,非常感谢!;-)这很奇怪,因为我尝试了
gridLayout->setContentsMargins(50,50,50,50)
它确实做到了。你是对的。我有一些有限的软件文本功能,可以自动添加、删除、读取任意数量的小部件,而且我在那里犯了一些编码错误。所以你实际上是绝对正确的。这段代码做了它应该做的,但在添加和删除更多的小部件时它就没有了。因此,如果你不介意的话,我选择它另一篇文章作为答案,因为这对我来说是一个更为坚实的解决方案。但是,我会记住你的文章,并在必要时使用它,所以我真诚地感谢你!干杯!;-)在PyQt5.QtCore import*grid.addWidget(imgLabel,0,Qt.AlignTop)的PyQt中您好@Synxis!谢谢您的回复。我会记住这一点并放在我的工具箱中以备将来参考。-)再次感谢您!不客气。别忘了,您不仅可以将其用于工具栏,还可以用于解决QGridLayout的问题!您好@Synxis。我已经做了各种测试并阅读了一些Qt的文档。我相信您建议的这种方法这是一个更好的解决方案。因为:如果添加的项目不多,它会起作用。如果项目被删除,它会起作用。如果项目被重新添加,它会起作用。因此,我选择你的答案是答案。我希望它能在将来帮助其他人。如果你不介意我说,如果你编辑你的消息,用更多的语言解释它,也许会有点酷也许代码引用了链接问题中的内容。再次感谢。