一、导读
在使用Qt开发界面的时候,大小限定是常使用的操作。在界面元素的鼻祖QWidget
中提供了一系列的方法,用于设定指定元素的大小或者最小/最大的大小:
//设置最大高度
voidsetMaximumHeight(intmaxh)
//设置最大大小
voidsetMaximumSize(constQSize&)
//设置最大大小(包含最大宽度、最大高度)
voidsetMaximumSize(intmaxw,intmaxh)
//设置最大宽度
voidsetMaximumWidth(intmaxw)
//设置最小高度
voidsetMinimumHeight(intminh)
//设置最小大小
voidsetMinimumSize(constQSize&)
//设置最小大小(包含最小宽度、最小高度)
voidsetMinimumSize(intminw,intminh)
//设置最小宽度
voidsetMinimumWidth(intminw)
//设置固定高度
voidsetFixedHeight(inth)
//设置固定宽度
voidsetFixedWidth(intw)
//设置固定大小
voidsetFixedSize(constQSize&s)
//设置固定大小(包含固定宽度和高度)
voidsetFixedSize(intw,inth)
上述的成员函数,功能与名称描述一致。
在不同显示屏大小的平台下,或者需要开发自适应大小的应用窗体时,大小限定是必备的操作。
二、大小限定背后的设计思路
如果应用程序的界面窗体大小在实际开发中大小是不变的,就需要使用setFixedxxx函数将窗体设置为固定的大小,不然,在鼠标拖动的情况下,且窗体中的各界面控件没有设计自适应,则会出现窗体填充不满或者多控件之间彼此覆盖的情况,例如如果使用《Qt这四种设置窗体背景的方法,都知道吗?》一文中所述的QPalette方法设置了背景图:
Widget::Widget(QWidget*parent)
:QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);
QPalettepalette=this->palette();
palette.setBrush(QPalette::Window,QBrush(QPixmap(":/images/bk.png")));
this->setPalette(palette);
}
这时候拖动鼠标,则会出现下图所示效果:
如果使用QLabel方法设置背景图:
ui->label->setPixmap(QPixmap(":/images/bk.png"));
则会出现下图所示效果:
综上,开发不需要自适应的窗体界面时,为了不影响应用软件的界面窗体中呈现内容的效果,设置窗体的大小是必要的。
如何设置窗体或者窗体中的界面控件的大小呢?有两种方法:
(1)在代码中使用大小限定函数进行设置。
(2)在Qt Designer中选中需要设置的界面控件对象,右键单击,在弹出的对话框中选择“大小限定”下的选项。
自适应的窗体开发,需要使用Qt提供的布局器(QBoxLayout
、QFormLayout
、QGridLayout
和QStackedLayout
)来完成,在代码中可以直接进行布局描述。当然,使用Qt Designer能够进行自适应窗体的快速开发,特别是垂直Spacer和水平Spacer这两个辅助控件在自适应窗体开发中特别好用。
三、小生总结
(1)在开发自适应的应用窗体时,在使用布局器进行布局后,如果窗体大小发生改变,可能窗体中的子控件大小会受到影响(发生大小变换),这时候限定子控件的大小是必须的。
(2)在布局的时候,合理设置Spacer的sizeType
属性,往往可以达到我们想要的布局效果。
(3)在使用QLabel显示文本的时候,QLabel大小需要预先评估,否则太长的字符串无法显示。
审核编辑 :李倩
-
函数
+关注
关注
3文章
4329浏览量
62576 -
应用程序
+关注
关注
37文章
3267浏览量
57684 -
Qt
+关注
关注
1文章
302浏览量
37899
原文标题:学Qt,“大小限定”背后的思路和“坑”
文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论