动态修改QGridLayout

目录

项目的图片浏览中需要单图、双图、四图等显示模式,之前使用QGraphicsScene显示多种图片,但这种方式扩展性不佳。当我们需要将每个图片组件包装成QWidget时,使用QGrapchicsScene就十分繁琐,不如使用布局管理器QGridLayout。切换模式时,只需修改布局管理器即可。下面,简单介绍我现在的程序思路:

The stretch factor is relative to the other columns in this grid. Columns with a higher stretch factor take more of the available space.
The default stretch factor is 0. If the stretch factor is 0 and no other column in this table can grow at all, the column may still grow.

可以看出,对所有的网格设置相同的ColumnStretch,就应该实现均匀网格分布。
我在增加新的元素到网格后添加下面的代码
[cpp]
work_space_layout_->setColumnStretch(col,1);
[/cpp]
将所有列的Stretch设为1。如此,可以网格均匀分布了。
但带来新的问题,当我从2图或4图切换回1图时,得到下面的结果:

当从QGridLayout中删除一列时,该列空间位置依旧保留。

从QGridLayout中删除一列或一行

参照StackOverflow上的《Removing widgets from QGridLayout》,我发现其中给出的代码中最关键的一行,需要在移除该网格上的widget后,将删除列或行的Stretch设为0!
[cpp]
work_space_layout_->setColumnStretch(1, 0);
work_space_layout_->setRowStretch(1, 0);
[/cpp]
如此,可以任意切换模式。