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

    文章

    58

    浏览量

    15401
  • 函数
    +关注

    关注

    3

    文章

    3903

    浏览量

    61310
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66807
  • Qt
    Qt
    +关注

    关注

    1

    文章

    299

    浏览量

    37340
  • 窗体
    +关注

    关注

    0

    文章

    10

    浏览量

    1452
收藏 人收藏

    评论

    相关推荐

    24小时QT编程

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

    驱动还是Qt

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

    你的DIY背后有什么故事?

    的夜里感叹我上辈子是不是个折翼的天使,不然怎么会染上了爱拆东西的毛病。后来上大学,进了电子的,才发现每个同学身上都有伤痕,”这是我拆我家收音机时被我爸打的。“ ”我靠你爸下手真重,我拆了电视机也才被我
    发表于 04-28 20:45

    面向就业,qt需要不?

    读研,老师做视觉方面的东西,要用到c++和qt,想问一下qt在工作中使用多不
    发表于 08-13 17:24

    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 48次下载

    分析QT3与QT4中uic的使用差异

    1、QT3在QT3中,用designer设计
    发表于 08-25 11:52 1191次阅读

    Qt快速入门手册

    介绍了在ubuntu系统中安装qt以及qt的基本使用
    发表于 06-14 16:05 33次下载

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

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

    空间限定零件列表

    空间限定零件列表
    发表于 04-27 08:42 3次下载
    空间<b class='flag-5'>限定</b>零件列表

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

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

    Qt“灵魂”之Meta-Object系统

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

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

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

    QTQT上位机串口编程

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