0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

学Qt,“大小限定”背后的思路和“坑”

嵌入式小生 来源:嵌入式小生 2023-02-02 10:31 次阅读

一、导读

在使用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);
}

这时候拖动鼠标,则会出现下图所示效果:f5af83f6-a299-11ed-bfe3-dac502259ad0.gif

如果使用QLabel方法设置背景图:

ui->label->setPixmap(QPixmap(":/images/bk.png"));

则会出现下图所示效果:

f602f1bc-a299-11ed-bfe3-dac502259ad0.gif

综上,开发不需要自适应的窗体界面时,为了不影响应用软件的界面窗体中呈现内容的效果,设置窗体的大小是必要的。

如何设置窗体或者窗体中的界面控件的大小呢?有两种方法:

(1)在代码中使用大小限定函数进行设置。

(2)在Qt Designer中选中需要设置的界面控件对象,右键单击,在弹出的对话框中选择“大小限定”下的选项。

f63cc3a6-a299-11ed-bfe3-dac502259ad0.png

自适应的窗体开发,需要使用Qt提供的布局器(QBoxLayout、QFormLayout、QGridLayout和QStackedLayout)来完成,在代码中可以直接进行布局描述。当然,使用Qt Designer能够进行自适应窗体的快速开发,特别是垂直Spacer和水平Spacer这两个辅助控件在自适应窗体开发中特别好用。

三、小生总结

(1)在开发自适应的应用窗体时,在使用布局器进行布局后,如果窗体大小发生改变,可能窗体中的子控件大小会受到影响(发生大小变换),这时候限定子控件的大小是必须的。

(2)在布局的时候,合理设置Spacer的sizeType属性,往往可以达到我们想要的布局效果。

f668e0bc-a299-11ed-bfe3-dac502259ad0.png

(3)在使用QLabel显示文本的时候,QLabel大小需要预先评估,否则太长的字符串无法显示。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 界面
    +关注

    关注

    0

    文章

    59

    浏览量

    15620
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62571
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68524
  • Qt
    Qt
    +关注

    关注

    1

    文章

    302

    浏览量

    37899
  • 窗体
    +关注

    关注

    0

    文章

    10

    浏览量

    1463
收藏 人收藏

    评论

    相关推荐

    24小时QT编程

    ` 本帖最后由 zgzzlt 于 2012-8-16 09:08 编辑 24小时QT编程`
    发表于 08-12 20:38

    驱动还是Qt

    首先我是一个大二电子信息工程专业的本科生,想在arm这方面发展,现在团队因为项目需要所以要分驱动和Qt组,之前我是照着国嵌的视频的,学了裸机和一点点的系统移植,现在不知道选哪个组,希望大家给些建议,谢谢{:3:}
    发表于 12-07 15:02

    IAP思路和代码以及细节和遇到的地方记录

    和20K的RAM,也有小道说有后置隐藏的64K,也就是说其实是有128K,我一直也没有测试,有空测测,有大神这样说,估计是可以的。这里重点记录一下我写的IAP思路和代码以及细节和遇到的地方。先大体的概...
    发表于 08-23 07:15

    qt值得学习吗?

    关注+星标公众号,不错过精彩内容作者 |李肖遥转自|技术让梦想更伟大qt值得学习吗?嵌入式要的东西真的很多,我们可能会说不写界面的话就不用qt了?我不赞同。
    发表于 11-08 06:01

    基于Qt/Embedded的嵌入式控制界面开发

    作者通过结合Qt/Embedded的特性和优点,提出用Qt/Embedded实现风力发电控制系统的图形界面的思路和设计原则,重点介绍了在嵌入式Linux内核基础上Qt/Embedded
    发表于 08-12 10:14 49次下载

    推荐使用QT5.14或者QT5.15版本 不要急着升级到QT6

      推荐使用QT5.14或者QT5.15版本,不建议升级最新版的QT6,很多你要的功能没了,特别是开发上位机需要的模块没了。 Qt 6.0 中已移除的模块,以下是不在
    的头像 发表于 01-26 16:37 4.8w次阅读

    Qt Designer、Qt Quick Designer和Qt Creator应用程序有什么区别?

    不管是Qt新手还是开发过qt的群体来说,对Qt Designer、Qt Quick Designer、Qt Creator这几个应用程序肯定
    的头像 发表于 03-17 09:40 7252次阅读

    C语言,为什么大家会说这本书是?资料下载

    电子发烧友网为你提供C语言,为什么大家会说这本书是?资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-05 08:53 7次下载
    <b class='flag-5'>学</b>C语言,为什么大家会说这本书是<b class='flag-5'>坑</b>?资料下载

    【北京迅为】嵌入式Linux+QT开发零基础入门+项目实战教程分享

    每一个技术点都能真真切切落实到项目中,即所用。1、独创框架学习法,先掌握整体的 QT 开发,在逐一击破!2、手把手教学,从 Windows 到 Linux 在到 QT,从 C ++直到 QT
    发表于 11-01 17:59 28次下载
    【北京迅为】嵌入式Linux+<b class='flag-5'>QT</b>开发零基础入门+项目实战教程分享

    嵌入式工程师学习Qt的几种开发方式

    关注+星标公众号,不错过精彩内容作者 |李肖遥转自|技术让梦想更伟大qt值得学习吗?嵌入式要的东西真的很多,我们可能会说不写界面的话就不用qt了?我不赞同。
    发表于 11-03 11:51 3次下载
    嵌入式工程师学习<b class='flag-5'>Qt</b>的几种开发方式

    Qt,此问题必解!

    用同样的方法新创建一个类,(用鼠标点击工程项目后,右键单击,选择“添加新文件”,在弹出的对话框中,选择Qt->Qt设计师界面类->Widget)将会弹出“选择类名”对话框:
    的头像 发表于 01-04 14:25 1106次阅读

    Qt大小限定背后思路和“

    如果应用程序的界面窗体大小在实际开发中大小是不变的,就需要使用setFixedxxx函数将窗体设置为固定的大小,不然,在鼠标拖动的情况下,且窗体中的各界面控件没有设计自适应,则会出现窗体填充不满或者多控件之间彼此覆盖的情况
    的头像 发表于 02-02 10:16 1535次阅读

    Qt“灵魂”之Meta-Object系统

    Meta-Object即是Qt的元对象系统,下文都以元对象系统进行描述。在Qt中,具有标志性特征的则是信号和槽函数机制,该机制的背后实现本质上则是元对象系统。编写Qt代码的时候,在定义
    的头像 发表于 02-10 13:50 1939次阅读

    基于Qt 5.15源码来聊聊隐式共享

    在实际开发中,Qt中很多类可以直接作为函数参数传递,这是为什么?其背后的实现机制又是什么?这些都归功于隐式共享
    的头像 发表于 02-12 16:52 788次阅读

    QTQT上位机串口编程

    QTQT上位机串口编程 最近因为项目需要,需要用到上位机,通过串口与上位机进行通讯,来上传和下发一些数据以及控制指令,所以用QT写了一个上位机,并记录下来,免得到时候要用又到处翻资料。
    发表于 05-08 10:02 25次下载
    <b class='flag-5'>QT</b>篇<b class='flag-5'>QT</b>上位机串口编程