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

Phi*_*hil 9 c++ python qt qscrollarea qgridlayout

我有QHBoxLayout我的形式添加到它3点的布局上.第二个有关于我的问题的项目.

我有一个QVBoxLayout在主要布局的第二个窗格(QHBoxLayout).这QVBoxLayout有一个QScrollArea补充addWidget.

QScrollArea是一个QWidget名为"scrollContents"的父级,后者又包含一个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|
Run Code Online (Sandbox Code Playgroud)

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

我怎么解决这个问题?

谢谢.

Ole*_*ber 15

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

gridLayout->addWidget(new QPushButton("Button"), 0, 0, Qt::AlignTop);
Run Code Online (Sandbox Code Playgroud)


Syn*_*xis 6

还有一种方法不同于trollixx的回答:添加一个虚拟小部件,其垂直大小策略设置为扩展,位于"底部" QGridLayout.请参阅此答案,其中还包含一个带工具栏的示例.