Qt QGridLayout自动将项目中心(移动)到中间。

时间:2012-12-25 20:48:29

标签: c++ python qt qscrollarea qgridlayout

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

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

QScrollArea是名为“scrollContents”的QWidget的父级,后者又包含QGridLayout

我正在为具有固定高度的QGridLayout添加自定义创建的窗口小部件。我们现在可以考虑这个100px

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

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

例如:[###代表QScrollArea的区域,其中QWidget QGridLayout

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

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

我该如何解决这个问题?

谢谢。

3 个答案:

答案 0 :(得分:12)

QGridLayout::addWidget()alignment参数。以下代码适用于我:

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

答案 1 :(得分:5)

还有一种方法与trollixx回答的方法不同:在QGridLayout的“底部”添加一个虚拟小部件,其垂直大小策略设置为扩展。请参阅this answer, which also contains an example with a toolbar

答案 2 :(得分:0)

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