qt widget 最大_Qt绘图:QWidget系列_尺寸

本文详细介绍了Qt中的QWidget类在尺寸方面的属性,包括基本参考尺寸、尺寸增量、子widgets边界、框架尺寸、最大最小尺寸及策略等,并提供了相关函数的使用说明,帮助理解Qt界面组件的尺寸管理。
摘要由CSDN通过智能技术生成

这一节主要介绍QWidget的属性,因为内容过多,我们分几个部分讲解。本文讲解的部分为和widget有关的尺寸方面的属性。因为某某类具有什么属性,相应的就会有调整该属性对应的方法函数,所以也就会一并把public function部分的方法函数也会罗列出来,这样以后讲public function的时候篇幅就不会那么多了。

基本参考尺寸 & 增量尺寸QSize baseSize() const

void setBaseSize(const QSize &)

void setBaseSize(int basew, int baseh)

这个属性保存了widget的基本参考尺寸大小,注意这个尺寸可不是初始尺寸!默认情况下,一个新建的widget的基本长和宽大小均为0。一般这个baseSize()属性是为sizeIncrement()(尺寸增量)属性而准备的,当你定义了widget的sizeIncrement()属性的时候,调整窗口会用到baseSize属性。

那就顺便说下这个尺寸增量属性值sizeIncrement()。QSize sizeIncrement()const

void setSizeIncrement(const QSize &)

void setSizeIncrement(int w, int h)

这个属性的意思是这样的,当你用鼠标改变窗体大小的时候是很流畅的,想拖多大就拖多大,是吧?如果你设置了这个增量属性,你每次拖动的时候窗体改变的幅度不再是1像素的变大,而是按照你设置的增量值变大。你要想体验效果的话在Linux系统上试试,Windows不支持。

拖动的时候widget的首选尺寸计算公式中包含baseSize属性,即:

width = baseSize().width() + i * sizeIncrement().width();

height = baseSize().height() + j * sizeIncrement().height();

子widgets边界大小 & 组合区域QRect childrenRect() const

QRegion childrenRegion() const

第一个rect是边界大小,第二个是组合区域。其实rect是两个子widget的矩形区域,而region是两个子widget的组合区域,区别在于一个只是矩形,一个是不规则区域。

框架尺寸QRect frameGeometry() const

QSize frameSize() const

简单区分下QRect和QSize的区别,假如平面上的(100,100)坐标处有个200*200长宽的矩形,如果用QRect表示为QRect(100,100,200,200);如果用QSize表示为QSize(200,200)。

所以上述两个函数的难点在于frame(框架)的理解,如下图:

既然放了这张图,那顺便把其他有关框架尺寸的属性值也一并放上来吧,看图很容易理解吧。const QRect & geometry() const

void setGeometry(int x, int y, int w, int h)

void setGeometry(const QRect &)

这个属性值需要注意的是,当我们改变geometry的时候会立马执行moveEvent()(移动事件)和resizeEvent()(重调大小事件),千万不可在这两个事件函数中再用setGeometry()函数,这样会导致无限递归!int x() const

int y() const

上面的包括下面要说的,这些属性值都是相对于父对象的,如果没有的话,默认为0.QPoint pos() const

void move(int x, int y)

void move(const QPoint &)

注意一点是,千万不可在moveEvent()函数中调用move()函数,这样会导致无限递归!int height() const

int width() const

就是长和宽(不包括frame框架)。注意,如果想要在多屏环境下获取屏幕长宽,这两个函数是不可以的。QRect rect() const

QSize size() const

void resize(int w, int h)

void resize(const QSize &)

void adjustSize()

一个获取区域,一个是获取尺寸大小,都不包括frame(框架),上文已经说过了。同样,在resizeEvent()事件函数中不要调用resize()函数,有可能导致无限递归!

最后一个adjustSize()函数是以sizeHint()为基准的,根据内容来调整widget的大小。virtual QSize sizeHint() const

这个虚函数一般子类化QWidget的时候要重写,也就是一个推荐尺寸,可写可不写。你要是想让自己编写的widget完善各种尺寸,写一写也不费什么事儿,就是个推荐尺寸而已。

最大尺寸 & 最小尺寸bool isMaximized() const

bool isMinimized() const

void showMaximized()

void showMinimized()

void showNormal()

该widget是否为最大化、最小化。后两个是方法,让widget最大化或者最小化,这两个函数起作用的前提是当前的widget类型为window。在X11,由于各家桌面管理器的不同可能会出现些问题。最后一个showNormal()的作用是:让最大化/最小化的widget恢复成正常大小。int maximumHeight() const

int maximumWidth() const

int minimumHeight() const

int minimumWidth() const

void setMaximumHeight(int maxh)

void setMaximumWidth(int maxw)

void setMinimumHeight(int minh)

void setMinimumWidth(int minw)

一组很简单的最大/最小、长/宽限制值。默认的,最大的数都存储16777215,最小的数都存储0. 宏QWIDGETSIZE_MAX的定义给出了widget的最大值。QSize maximumSize() const

void setMaximumSize(const QSize &)

void setMaximumSize(int maxw, int maxh)

QSize minimumSize() const

void setMinimumSize(const QSize &)

void setMinimumSize(int minw, int minh)

上一组指名道姓的设置最大小长宽,这个更加广泛,设置QSize来限值widgte的尺寸。virtual QSize minimumSizeHint() const

这个虚函数也是需要重新实现,这个仅仅是第一次的提示,如果设置了minimumSize(),那么widget将会遵循minimumSize()而忽略本属性。

策略

打开Qt Creator创建个默认的界面工程,在设计师界面右侧可以看到有不同的策略可以选择。其他的效果可以在这里实验,可视化还是比较方便的。QSizePolicy sizePolicy() const

void setSizePolicy(QSizePolicy)

void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)

其实策略就是指:默认的布局行为。当有一个QLayout来管理widget的时候,按照QLayout的行为去布局;如果没有QLayout来管理的话,那么就会按照该属性设置的布局行为。

默认的策略为:Preferred/Preferred。这个单词的含义是首选的、优先的。用了这个策略,widget可以自由的变换大小,但比较偏向sizeHint()的尺寸;类似于按钮的widget设置的尺寸策略是水平方向任意拉伸,但是垂直方向固定。类似的还有QLineEdit、QSpinBox等,还有QProgressBar。QToolBar是长方形的,一般双向都可以任意拉伸。支持不同方向上的widget只在各自方向上拉伸,如QSlider、QScrollBar、QHeader,并且它们可以采用比sizeHint()更小的尺寸来布局。

由于QSizePolicy内容略多,不适合在本文中呈现,将会在其他文篇中呈现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值