函数部分
setHorizontalStretch
设置控件的水平拉伸系数比,设置范围是[0, 255],默认值是0,就是没有系数比。但是单独设置它是没有作用的,因为没有科比性,所以布局中需要至少两个控件存在,它才会起到作用。
同时它的优先级比较低,如果布局中也设置拉伸因子,那么将以布局中设置的为准。举个栗子:比如法外狂徒张三和放风的路人甲分赃物,开干前商量好是我9你1。
QPushButton * btn1 = new QPushButton("法外狂徒张三"); QSizePolicy sp1 = btn1->sizePolicy(); sp1.setHorizontalStretch(9); btn1->setSizePolicy(sp1); QPushButton * btn2 = new QPushButton("放风路人甲"); QSizePolicy sp2 = btn1->sizePolicy(); sp2.setHorizontalStretch(1); btn2->setSizePolicy(sp2); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2);干了一票之后,路人甲作用很大,张三当即决定七三分
layout->setStretch(0, 7); layout->setStretch(1, 3);setVerticalStretch
设置垂直方向的拉伸因子,和水平拉伸因子一样,只是方向不同而已。
setHorizontalPolicy
设置水平的拉伸策略,它支持的枚举值有以下这些
QSizePolicy::Fixed QSizePolicy::Minimum QSizePolicy::Maximum QSizePolicy::Preferred QSizePolicy::Expanding QSizePolicy::MinimumExpanding QSizePolicy::Ignored在说明这些值之前,最好先了解下这些策略枚举值,因为这些才是真正起作用的幕后大佬:
QSizePolicy::GrowFlag //允许超过sizeHint的值 QSizePolicy::ExpandFlag //贪婪模式,有多少空间就要多少空间 QSizePolicy::ShrinkFlag //允许比sizeHint的值更小 QSizePolicy::IgnoreFlag //一切听从布局大哥的安排,给多少是多少,毫无怨言了解了这些后,回头来再看看拉伸策略的枚举值
QSizePolicy::Fixed 0 //老顽固,就是这么大,既不拉伸也不缩小 QSizePolicy::Minimum GrowFlag //sizeHint就是最小值,且只能比sizeHint大 QSizePolicy::Maximum ShrinkFlag //sizeHint就是最大值,且只能比sizeHint小 QSizePolicy::Preferred GrowFlag | ShrinkFlag //sizeHint就是最好的大小,但也允许拉伸也允许缩小 QSizePolicy::Expanding GrowFlag | ShrinkFlag | ExpandFlag //在Preferred的基础上增加了贪婪模式 QSizePolicy::MinimumExpanding GrowFlag | ExpandFlag //虽然也是贪婪模式,但不允许比sizeHint小 QSizePolicy::Ignored ShrinkFlag | GrowFlag | IgnoreFlag //彻底摆烂,任人摆布,爱咋咋地吧好巧不巧张三正好遇到韩老魔睡觉,悄摸摸偷了韩跑跑的储物袋,这下张三装东西的能力大大提升(属于Minimum级别),而路人甲一介凡人能装得东西超不出口袋上限(属于Maximum级别)
QPushButton * btn1 = new QPushButton("法外狂徒张三"); QSizePolicy sp1 = btn1->sizePolicy(); sp1.setHorizontalPolicy(QSizePolicy::Minimum); btn1->setSizePolicy(sp1); QPushButton * btn2 = new QPushButton("路人甲"); QSizePolicy sp2 = btn1->sizePolicy(); sp2.setHorizontalPolicy(QSizePolicy::Maximum); btn2->setSizePolicy(sp2); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2);
可以看到路人甲的长度大小就没变化。
没过多久,张三又想干一票,然后找到路人乙,万万没想到路人乙竟是个佛系派(属于Ignored级别),张三直接好家伙直接开启贪婪模式(Expanding级别)
QPushButton * btn1 = new QPushButton("法外狂徒张三"); QSizePolicy sp1 = btn1->sizePolicy(); sp1.setHorizontalPolicy(QSizePolicy::Expanding); btn1->setSizePolicy(sp1); QPushButton * btn2 = new QPushButton("路人乙"); QSizePolicy sp2 = btn1->sizePolicy(); sp2.setHorizontalPolicy(QSizePolicy::Ignored); btn2->setSizePolicy(sp2); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2);路人乙直接没了,张三是一毛也不给呀
setVerticalPolicy
只是方向改为垂直方向,取值和水平策略一致