Qt自学之路(四)-layout

Qt自学之路(四)-layout,第1张

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()虚函数,用来移除子对象。

        

                

        

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/3002157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存