1、layout介绍
Qt提供一个layout系统,这个系统可以对一个窗口内的子控件进行自动排列,合理安排这些控件的布局。layout系统实际上采用的是组合设计模式。类图如下:
通常需要为最顶层窗口指定一个layout对象。顶层窗口对象通过调用setGeometry()接口函数来对窗口内的控件布局进行刷新。
2、Qt内置的layout类
(1)QHBoxLayout:实现控件单行布局
(2) QVBoxLayout:实现控件单列布局
(3)QGridLayout:实现控件在二维网格中的布局,一个控件可以占据多行多列。
3、子控件(widget)及子布局如何影响整体布局
(1)sizeHint()成员函数为父layout提供本控件(或布局)最佳尺寸信息,供父layout对所有控件进行排布。
(2)maximumSize()成员函数为父layout提供本控件(或布局)的最大值信息,本控件(或布局)分配到的空间不会比最大值还要大。
(3)minimumSize()成员函数为父layout提供本控件(或布局)的最小值信息,本控件(或布局)分配到的空间不会比最小值还要小。
(4)hasHeightForWidth() 成员函数指示本控件(或布局)的高度值是否依赖于宽度值。heightForWidth(int)成员函数根据输入的宽度值计算出本控件(或布局)的高度值。
(5)expandingDirections() 成员函数指示本控件(或布局)可沿哪个方向获取额外空间。Qt::Vertical表示可以沿垂直方向获取额外空间, Qt::Horizontal指示可沿水平方向获取额外空间。这两个枚举值可以通过组合来表示控件(或布局)可沿两个方向进行扩展。
4、layout成员函数说明
(1)setSizeConstraint(QLayout::SizeConstraint)成员函数设置包含layout对象的控件(widget)调整尺寸的方式。
1)QLayout::SetDefaultConstraint:表示除非控件已经设置了最小值,否则控件的最小值为 minimumSize()的返回值。
2)QLayout::SetFixedSize:表示将控件的尺寸固定为sizeHint()成员函数返回值。控件不支持缩放。
3)QLayout::SetMinimumSize:表示将控件的最小值设置为 minimumSize()的返回值。控件尺寸不能比 minimumSize()返回值更小。
4)QLayout::SetMaximumSize:表示将控件的最大值设置为maximumSize()的返回值。控件尺寸不能比maximumSize()返回值更大。
5)QLayout::SetMinAndMaxSize:表示将控件的最大值设置为maximumSize()的返回值。将控件的最小值设置为 minimumSize()的返回值。
6)QLayout::SetNoConstraint:表示不对控件缩放进行限制。
(2)addItem(QLayoutItem *item) 成员函数向layout对象中追加子布局。或其他QLayoutItem派生类对象。
(3)addWidget(QWidget *w)成员函数向layout对象中追加子控件。
(4)itemAt(int index)成员函数获取对应于index索引的子对象。
(5)takeAt(int index) 成员函数返回对应于index索引的子对象,同时将子对象移除。
(6)parentWidget() 成员函数返回layout所属的父控件。如果layout对象是一个子布局,那么这个成员函数返回它父layout对象所属的控件。
(7)setSpacing(int)成员函数用于设置子控件(布局)之间的间距。
(8)setContentsMargins(const QMargins &margins)成员函数用于设置环绕在布局对象周围的边界距离。
5、如何决定控件(widget)缩放方式
(1)如果一个控件设置了layout对象,则layout对象的QLayout::SizeConstraint属性决定了控件缩放方式。
(2)如果一个控件没有设置layout对象,则控件的QSizePolicy属性决定了控件的缩放方式6、控件(widget)手动布局方式
如果一个控件没有安装layout对象,则他需要重写QWidget::resizeEvent() 虚函数,并手动调用每个子控件的setGeometry() 来刷新布局。
7、如何写一个自定义layout类
(1)定义一个容器类型的成员变量来承载子对象。
(2)重写addItem()虚函数,来实现像layout对象追加子对象
(3)重写setGeometry()虚函数,实现对子对象进行布局。
(4)重写sizeHint()虚函数,来提供布局对象的最优值信息。这个值用于为父对象进行布局时提供信息。
(5)重写itemAt()虚函数,用来获取子对象。
(6)重写takeAt()虚函数,用来移除子对象。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)