Qt中的 Size Hints 和 Size Policies.docx

上传人:b****5 文档编号:6498393 上传时间:2023-01-07 格式:DOCX 页数:6 大小:136.89KB
下载 相关 举报
Qt中的 Size Hints 和 Size Policies.docx_第1页
第1页 / 共6页
Qt中的 Size Hints 和 Size Policies.docx_第2页
第2页 / 共6页
Qt中的 Size Hints 和 Size Policies.docx_第3页
第3页 / 共6页
Qt中的 Size Hints 和 Size Policies.docx_第4页
第4页 / 共6页
Qt中的 Size Hints 和 Size Policies.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

Qt中的 Size Hints 和 Size Policies.docx

《Qt中的 Size Hints 和 Size Policies.docx》由会员分享,可在线阅读,更多相关《Qt中的 Size Hints 和 Size Policies.docx(6页珍藏版)》请在冰豆网上搜索。

Qt中的 Size Hints 和 Size Policies.docx

Qt中的SizeHints和SizePolicies

Qt中的SizeHints和SizePolicies

之前一直对这几个属性搞不清楚,前几天仔仔细细地看了文档解释并做了一些测试,现在来归纳一下:

    首先我们得知道这几个属性保存的值是什么,它们分别是用来干什么的。

∙ sizeHint 

∙这个属性所保存的QSize类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个widget该有多大,它的一个参考来源就是这个sizeHint属性的值,而这个值由sizeHint()函数来确定。

但是widget的大小的确定还有其它因素作用,下面会讲到。

现在只需知道sizeHint()会返回一个被推荐的尺寸。

那么这个尺寸的取值是怎样的呢?

当它是一个无效值的时候(sizeHint().isValid()返回false,QSize中width或者height有一个为复数就会是无效的),什么作用也没有;当它是一个有效值的时候,它就成了widget大小的一个参考。

Qt中对sizeHint()的默认实现是这样的:

当widget没有布局(layout),返回无效值;否则返回其layout的首选尺寸( preferredsize)。

1:

QWidget*widget=newQWidget;

2:

widget->show();

3:

qDebug()<width()<<","<height();

4:

qDebug()<sizeHint().width()<<","<sizeHint().height();

1:

//output:

2:

//1009,520

3:

//-1,–1

输出结果中第二行:

sizeHint()返回的是一个无效的QSize,因为widget没有布局。

1:

QWidget*widget=newQWidget;

2:

QHBoxLayout*layout=newQHBoxLayout;

3:

QPushButton*button=newQPushButton("Ggicci");

4:

layout->addWidget(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参考;

输出结果中第三行:

中间button的实际大小;

从输出结果中可以证明以上说过的两点:

1)在widget有layout的情况下,其sizeHint()函数返回的是有效值作为其自身实际尺寸的参考;

2)sizeHint()返回的值并不一定会作为widget的实际尺寸,因为widget的尺寸的决定还有其它因素作用;

∙ minimumSizeHint 

∙[ FromQtDoc :

Qt中的widget有size和minimumSize两个属性,比较好理解的是上面的sizeHint是作为size的参考的,那么minimumSizeHint是作为minimumSize的参考的。

minimumSizeHint()的默认实现同sizeHint()基本一样:

在widget无layout的情况下返回无效值;否则返回layout的最小尺寸( minimumsize ),注意与上面的首选尺寸不同哦!

有同学会问preferredsize和minimumsize的区别:

preferredsize由layout的sizeHint()函数返回,minimumsize由layout的minimumSize()函数返回;前者的实现会根据layout的种类的变化而变化,比如在QHBoxLayout和QVBoxLayout中各放置同样的两个QPushButton,两者的sizeHint()返回的值是不一样的,后者是返回能够容纳下所有包含在layout内的组件的最小尺寸。

Qt中大多数内置的widget都已经重新实现了minimumSizeHint()。

你可以自己写自己的widget然后重新实现sizeHint()、minimumSizeHint()这些函数来达到自己的布局效果。

∙[ FromQtDoc :

layout永远也不会把一个widget的大小设置到比minimumSizeHint()返回的尺寸还小,除非widget设置了最小尺寸或者其sizePolicy属性设置了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=newQPushButton("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和windows系统的共同问题,第一widget默认有min,max,close三个按钮,也就是右上角的最小化、最大化、关闭按钮,这导致了width无法继续缩小。

其实通过widget->setWindowFlags(Qt:

:

Window|Qt:

:

WindowTitleHint);可以把min,max按钮给去了,这样的widget的width就可以比之前更小一点啦,如下右图。

∙ sizePolicy 

∙[ FromQtDoc :

这个属性保存了该widget的默认布局属性,如果它有一个layout来布局其子widgets,那么这个layout的sizepolicy将被使用;如果该widget没有layout来布局其子widgets,那么它的sizepolicy将被使用。

默认的policy是Preferred/Preferred。

QSizePolicy:

:

Policy枚举值有如下几个:

Constants

Description

QSizePolicy:

:

Fixed

widget的实际尺寸只参考sizeHint()的返回值,不能伸展(grow)和收缩(shrink)

QSizePolicy:

:

Minimum

可以伸展和收缩,不过sizeHint()的返回值规定了widget能缩小到的最小尺寸

QSizePolicy:

:

Maximum

可以伸展和收缩,不过sizeHint()的返回值规定了widget能伸展到的最大尺寸

QSizePolicy:

:

Preferred

可以伸展和收缩,但没有优势去获取更大的额外空间使自己的尺寸比sizeHint()的返回值更大

QSizePolicy:

:

Expanding

可以伸展和收缩,它会尽可能多地去获取额外的空间,也就是比Preferred更具优势

QSizePolicy:

:

MinimumExpanding

可以伸展和收缩,不过sizeHint()的返回值规定了widget能缩小到的最小尺寸,同时它比Preferred更具优势去获取额外空间

QSizePolicy:

:

Ignored

忽略sizeHint()的作用

从上图中可以看出Preferred虽然可以收缩得比sizeHint()更小,但是最小由minimumSizeHint()限制

∙QSizePolicy:

:

Fixed

1:

QWidget*widget=newQWidget;

2:

QHBoxLayout*layout=newQHBoxLayout;

3:

QPushButton*button=newQPushButton("Ggicci");

4:

//button->setSizePolicy(QSizePolicy:

:

Fixed,QSizePolicy:

:

Fixed);

5:

layout->addWidget(button);

6:

widget->setLayout(layout);

7:

widget->show();

在第4行代码注释掉的情况下:

QPushButton默认的sizePolicy是垂直方向Fixed,水平方向Preferred,故水平方向会伸展 

没有注释掉的情况下:

 

∙QSizePolicy:

:

Preferred和QSizePolicy:

:

Expanding的区别 :

两者都可以伸展和收缩,但是区别在于谁可以伸展地更牛B

1:

QWidget*widget=newQWidget;

2:

QHBoxLayout*layout=newQHBoxLayout;

3:

QPushButton*button1=newQPushButton("Ggicci");

4:

QPushButton*button2=newQPushButton("MingjieTang");

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);

10:

widget->show();

两者一样牛B(在水平方向上,垂直方向不构成额外空间竞争关系):

1:

QWidget*widget=newQWidget;

2:

QHBoxLayout*layout=newQHBoxLayout;

3:

QPushButton*button1=newQPushButton("Ggicci");

4:

QPushButton*button2=newQPushButton("MingjieTang");

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