QGridLayout的addWidget、setColumnStretch 等的使用方法

目前用得比较多的布局是 QGridLayout,它将界面划分为若干个网格,

而控件可以按需要放到对应的格子,确保了控件的准确定位。

m_layout->addWidget(m_calender,0,0);   //calendar放在第一行第一列

m_layout->addWidget(m_tblList,0,1);   //table放在第一行第二列

但是我们还需要控件在窗体缩放的时候也按比例缩放,

这个时候就需要用到拉伸因子这个东东。拉伸因子决定了窗体尺寸发生改变时,控件发生改变的比例。

每个布局都有相应的拉伸因子设置函数。以下是QGridLayout里面的设置函数

void setColumnStretch ( int column, int stretch );

void setRowStretch ( int row, int stretch );

具体使用如下

m_layout->setColumnStretch(0,3);
m_layout->setColumnStretch(1,1);

这样在窗体反正改变的时候,m_calender与m_tblList会按3:1的比例发生改变。

并且,在不进行其他尺寸设置的时候(最大值最小值固定什么的),控件也会以这个比例显示在界面上。

 

 

我遇到的问题:

想实现的功能是在QGridLayout(我创建的这个layout是一个宽度为4个widget宽度的窗口的布局)里一个一个地addWidget,最终实现N行4列的布局效果。但是在第一行添加两个widget时发现,第二个widget占在第一行第三列

self.grid_layout.addWidget(m_calender,0,0)
self.grid_layout.addWidget(m_tblList,0,1)

添加第三个widget后,

self.grid_layout.addWidget(wid,0,2)

三个widget均分了四个widget的宽度。

查了很久没有找到方法,最后的解决方案是:

在每次添加widget后都setColumnStretch

self.grid_layout.setColumnStretch(0, 1)
self.grid_layout.setColumnStretch(1, 1)
self.grid_layout.setColumnStretch(2, 1)
self.grid_layout.setColumnStretch(3, 1)

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页