ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:136.89KB ,
资源ID:6498393      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6498393.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Qt中的 Size Hints 和 Size Policies.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Qt中的 Size Hints 和 Size Policies.docx

1、Qt中的 Size Hints 和 Size PoliciesQt中的 Size Hints 和 Size Policies之前一直对这几个属性搞不清楚,前几天仔仔细细地看了文档解释并做了一些测试,现在来归纳一下: 首先我们得知道这几个属性保存的值是什么,它们分别是用来干什么的。 sizeHint这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeHint 属性的值,而这个值由 sizeHint() 函数来确定。但是 widget 的大小的确定还有其它因素作用,下面会

2、讲到。现在只需知道 sizeHint() 会返回一个被推荐的尺寸。那么这个尺寸的取值是怎样的呢?当它是一个无效值的时候(sizeHint().isValid() 返回 false,QSize 中 width 或者 height 有一个为复数就会是无效的),什么作用也没有;当它是一个有效值的时候,它就成了 widget 大小的一个参考。Qt 中对 sizeHint() 的默认实现是这样的:当 widget 没有布局(layout),返回无效值;否则返回其 layout 的首选尺寸(preferred size)。1:QWidget *widget = newQWidget;2:widget-sh

3、ow();3:qDebug() width() ,height();4:qDebug() sizeHint().width() ,sizeHint().height();1:/output:2:/1009 , 5203:/-1 , 1输出结果中第二行:sizeHint() 返回的是一个无效的 QSize,因为 widget 没有布局。1:QWidget *widget = newQWidget;2:QHBoxLayout *layout = newQHBoxLayout;3:QPushButton *button = newQPushButton(Ggicci);4:layout-addWid

4、get(button);5:widget-setLayout(layout);6:widget-show();7:qDebug() width() ,height();8:qDebug() sizeHint().width() ,sizeHint().height();9:qDebug() width() ,height();1:/output:2:/112 , 45 3:/97 , 45 4:/90 , 23输出结果中第一行:widget 的实际尺寸 (112, 45);输出结果中第二行:sizeHint() 返回 layout 的首选尺寸(97,45)供 widget 参考;输出结果中第三

5、行:中间 button 的实际大小;从输出结果中可以证明以上说过的两点:1) 在 widget 有 layout 的情况下,其 sizeHint() 函数返回的是有效值作为其自身实际尺寸的参考;2) sizeHint() 返回的值并不一定会作为 widget 的实际尺寸,因为 widget 的尺寸的决定还有其它因素作用; minimumSizeHintFrom Qt Doc: Qt 中的 widget 有 size 和 minimumSize 两个属性,比较好理解的是上面的 sizeHint 是作为 size 的参考的,那么 minimumSizeHint 是作为 minimumSize 的参

6、考的。minimumSizeHint() 的默认实现同 sizeHint() 基本一样:在 widget 无 layout 的情况下返回无效值;否则返回 layout 的最小尺寸(minimum size),注意与上面的首选尺寸不同哦!有同学会问 preferred size 和 minimum size 的区别:preferred size 由 layout 的 sizeHint() 函数返回,minimum size 由 layout 的 minimumSize() 函数返回;前者的实现会根据 layout 的种类的变化而变化,比如在 QHBoxLayout 和 QVBoxLayout 中

7、各放置同样的两个 QPushButton,两者的 sizeHint() 返回的值是不一样的,后者是返回能够容纳下所有包含在 layout 内的组件的最小尺寸。Qt 中大多数内置的 widget 都已经重新实现了 minimumSizeHint()。你可以自己写自己的 widget 然后重新实现 sizeHint()、minimumSizeHint() 这些函数来达到自己的布局效果。From Qt Doc: layout 永远也不会把一个 widget 的大小设置到比 minimumSizeHint() 返回的尺寸还小,除非 widget 设置了最小尺寸或者其 sizePolicy 属性设置了

8、QSizePolicy:Ignore。如果 widget 通过 setMinimumSize() 设置了最小尺寸,那么 minimumSizeHint 的作用就会被忽略掉。我们知道如果在一个 layout 里面添加一些子 widget,然后窗口应用这个 layout 的时候,一般情况下我们是无法缩放到使其中的子 widget 看不见的。如下:1:QWidget *widget = newQWidget;2:widget-setMinimumSize(10, 10);3:QVBoxLayout *layout = newQVBoxLayout;4:QPushButton *button = ne

9、wQPushButton(Ggicci);5:layout-addWidget(button);6:widget-setLayout(layout);7:widget-show();这里同上显示一个含有 QPushButton 的 QWidget,不过在这里设置了其最小尺寸为(10, 10),此时 minimumSizeHint() 将不起作用,也就是我们可以把 widget 缩放到(10, 10),不过这是理论上的哦,亲(在这里你讲看到一个例外),以下就是缩小到了极致:(112,10),同学,是否在思考为什么 width 无法缩小到比 112 更小了。其实这是 widget 和 window

10、s 系统的共同问题,第一 widget 默认有 min,max,close 三个按钮,也就是右上角的最小化、最大化、关闭按钮,这导致了 width 无法继续缩小。其实通过 widget-setWindowFlags(Qt:Window | Qt:WindowTitleHint); 可以把 min, max 按钮给去了,这样的 widget 的 width 就可以比之前更小一点啦,如下右图。 sizePolicyFrom Qt Doc: 这个属性保存了该 widget 的默认布局属性,如果它有一个 layout 来布局其子 widgets,那么这个 layout 的 size policy 将被

11、使用;如果该 widget 没有 layout 来布局其子 widgets,那么它的 size policy 将被使用。默认的 policy 是 Preferred/Preferred。QSizePolicy:Policy 枚举值有如下几个:ConstantsDescriptionQSizePolicy:Fixedwidget 的实际尺寸只参考 sizeHint() 的返回值,不能伸展(grow)和收缩(shrink)QSizePolicy:Minimum可以伸展和收缩,不过sizeHint() 的返回值规定了 widget 能缩小到的最小尺寸QSizePolicy:Maximum可以伸展和收

12、缩,不过sizeHint() 的返回值规定了 widget 能伸展到的最大尺寸QSizePolicy:Preferred可以伸展和收缩,但没有优势去获取更大的额外空间使自己的尺寸比 sizeHint() 的返回值更大QSizePolicy:Expanding可以伸展和收缩,它会尽可能多地去获取额外的空间,也就是比 Preferred 更具优势QSizePolicy:MinimumExpanding可以伸展和收缩,不过sizeHint() 的返回值规定了 widget 能缩小到的最小尺寸,同时它比 Preferred 更具优势去获取额外空间QSizePolicy:Ignored忽略 sizeHi

13、nt() 的作用从上图中可以看出 Preferred 虽然可以收缩得比 sizeHint() 更小,但是最小由 minimumSizeHint() 限制QSizePolicy:Fixed1:QWidget *widget = newQWidget;2:QHBoxLayout *layout = newQHBoxLayout;3:QPushButton *button = newQPushButton(Ggicci);4:/button-setSizePolicy(QSizePolicy:Fixed, QSizePolicy:Fixed);5:layout-addWidget(button);6

14、:widget-setLayout(layout);7:widget-show();在第4行代码注释掉的情况下:QPushButton 默认的 sizePolicy 是垂直方向 Fixed,水平方向 Preferred,故水平方向会伸展没有注释掉的情况下:QSizePolicy:Preferred 和 QSizePolicy:Expanding 的区别:两者都可以伸展和收缩,但是区别在于谁可以伸展地更牛B1:QWidget *widget = newQWidget;2:QHBoxLayout *layout = newQHBoxLayout;3:QPushButton *button1 = n

15、ewQPushButton(Ggicci);4:QPushButton *button2 = newQPushButton(Mingjie Tang); 5:button1-setSizePolicy(QSizePolicy:Preferred, QSizePolicy:Preferred); 6:button2-setSizePolicy(QSizePolicy:Preferred, QSizePolicy:Preferred);7:layout-addWidget(button1);8:layout-addWidget(button2);9:widget-setLayout(layout)

16、;10:widget-show();两者一样牛B(在水平方向上,垂直方向不构成额外空间竞争关系):1:QWidget *widget = newQWidget;2:QHBoxLayout *layout = newQHBoxLayout;3:QPushButton *button1 = newQPushButton(Ggicci);4:QPushButton *button2 = newQPushButton(Mingjie Tang); 5:button1-setSizePolicy(QSizePolicy:Preferred, QSizePolicy:Preferred); 6:button2-setSizePolicy(QSizePolicy:Expanding, QSizePolicy:Preferred);7:layout-addWidget(button1);8:layout-addWidget(button2);9:widget-setLayout(layout);10:widget-show();button2更牛B(在水平方向上构成竞争关系):有了上述的样例,QSizePolicy:Minimum, QSizePolicy:Maximum, QSizePolicy:MinimumExpanding, QSizePolicy:Ignored 就比较好理解了吧,亲

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1