1. 容器根据内部控件数和columns数计算出行数
2. 从上到下,从左到右添加控件
如果columns为1并且width mode设置为column width,则该控件缩放时占据整个容器宽度
如果columns大于1,则最后一个列的控件占据剩余宽度,其他列仅相当于auto,不会变,这是我们要写代码避免的,比方说我们需要均匀分割各列
细节上还有几点要注意的
1. 将自己的resize代码写一个过程,比方说myResize
2. 在formrun的run方法中首次进行调用
3. 然后覆盖formrun的resize事件中添加myresize调用
4. 在计算宽度时要减去容器的verticalSpacingValue,根据列数-1(默认是控件按vertical排列的)
currencyGrid.width((currencyWireGroup.widthValue()-currencyWireGroup.verticalSpacingValue())/2);
有空的时候再仔细想想这些过程是否可以更智能些,目前,这个函数可以减少我们的工作
//class ControlHelper
static void resizeHelper(FormGroupControl gc)
{
int i;
;
for(i=1;i<=gc.controlCount();i++){
gc.controlNum(i).width((gc.widthValue()-gc.verticalSpacingValue()*gc.columns()-1)/gc.columns());
}
}
调用
只需要传入要均匀分隔的组变量即可
void myResize()
{
;
ControlHelper::resizeHelper(currencyWireGroup);
ControlHelper::resizeHelper(adjustSEttingGroup);
}
效果
更细节的讨论在这里
http://www.qiuhao.com/dispbbs.asp?boardid=2&id=9054&star=1#38752
良好实践
1.按默认的控件排列规则
2. 总是设定width 为column width
3. 在复杂布局时,大量使用group