一直對addStretch感覺怪怪的,直到看見了下面這段話:
addStretch()函數用於在控件按鈕間增加伸縮量,
伸縮量的比例為1:1:1:6,意思就是將控件以外的空白地方按設定的比例等分為9份
並按照設定的順序放入Layout布局器中。
addStretch()的功能相當於是添加一個空白占位控件
1. 比如我有一個QHBoxLayout,我依次addWidget加入如下控件,不使用addStretch()
h_layout = QHBoxLayout()
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addWidget(self.connect_plc)
布局如下,因為這里沒有添加任何空白占位控件,所以已有的這些控件將會將這個橫向布局給占滿。本來這些控件按默認長度來排列的話會占不滿整個長度,但因為沒有空白占位控件,所以QT會自動將這些控件按它自己的規則比例來拉升填滿。
2. 如果在最后加一個addStretch()。如果一個Layout中只有一個addStretch(),那里面的參數將不重要。
h_layout = QHBoxLayout()
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addWidget(self.connect_plc)
h_layout.addStretch(1)
布局如下,這里在最后添加了一個空白站位控件,那這個控件會將所有空白位置都占滿。這里空白位置是指除了addStretch之外的所有控件按默認長度排列后還剩下的空白。
3. 如果在這個button前面也加一個addStretch,那這兩個addStretch將根據各自的參數來按比例來分配空白空間
h_layout = QHBoxLayout()
sub_grid.addLayout(h_layout, 0, 0)
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addStretch(1)
h_layout.addWidget(self.connect_plc)
h_layout.addStretch(1)
布局如下,
4. 如果button前的addStretch的參數改為2,那button前面的空白長度將是整個空白長度的2/3,后面的空白占整個空白長度的1/3
h_layout = QHBoxLayout()
sub_grid.addLayout(h_layout, 0, 0)
h_layout.addWidget(QLabel("PLC的IP:"))
h_layout.addWidget(self.ip_edit)
h_layout.addWidget(QLabel("PLC的端口:"))
h_layout.addWidget(self.port_edit)
h_layout.addStretch(2)
h_layout.addWidget(self.connect_plc)
h_layout.addStretch(1)
布局如下,