当前位置: 首页 > news >正文

QT常见显示类控件及其属性

Label

QLabel可用用来显示文本和图片

核心属性如下

文本格式---textFormat

例:

在ui界面创建3个label,分别用不同的显示格式

在构造函数进行文本格式和文内容设置

此时运行后三种显示格式无区别

可以给富文本加标签

如<B>表示加粗

如果将<B>加到纯文本格式的文本内容中,只会被当作纯文本处理

在markdown格式的文本中加#将文本作为一级标题

如果在纯文本格式加入#也只会当中文本处理

pixmap

用于给标签添加图片

如:

创建一个label

创建资源文件

用qrc机制将准备好的图片导入资源文件

将label设置的和窗口一样大,用于显示图片

800,600

接收图片并设置进label

但是图片和窗口并不完全嵌合,需要对图片大小进行调整

通过scaledContents,启动图片自动拉伸让其进行调整

使图片自动嵌合

但是此时若是对widget窗口进行调整,就会使widget大小改变,而在构造函数中将widget大小设置进label是一次性的,一旦程序运行起来后,窗口发生变化时,label的大小是不会改变的,从而使label中的图片和窗口不嵌合

如何进行调整使label一直嵌合窗口,随窗口大小改变而发生改变呢?

利用事件---用户的操作分为两种,一种是信号,一种是事件

鼠标拖拽修改窗口大小的时候,就是一种事件----resize事件(resizeEvect)

像resize这样的事件是连续变化的,把窗口尺寸从A大小拖到B大小的过程中,会触发一系列的resizeEvent

此时就可以借助resizeEvent来修改label大小

通过让widget窗口类重写父类(QWidget)的resizeEvent虚函数(多态)

在鼠标拖动窗口修改窗口大小时,不断触发resizeEvent事件,不断对label大小进行修改,从而实现label的大小一直和窗口嵌合

测试:

选中函数名按alt+enter进行定义

在触发resizeEvent事件时打印窗口大小信息

进行拖拽修改窗口大小的测试,查看输出内容

每次拖拽修改大小都会触发事件,打印信息

实现修改尺寸:

实现实时修改label大小,因为对图片设置了自动拉伸,所有label大小改变图片也会自动适应

alignment

文本对齐和自动换行

例:

先给label带上边框便于观察

选中label后将其framefshape的属性改为box,使label带边框

创建四个label给他们设置不同的对齐方式

在构造函数中进行设置

wordWrap

自动换行

例如:

设置自动换行

indent

文本缩进

设置文本缩进后,不只是首行进行缩进,其余行也会缩进

margin

文本边距-----文本框内四个方向的边框,使文本只能在四边边距内显示

Buddy

Qlabel关联伙伴关系,点击QLabel激活关联其伙伴

如:

创建两个radiobutton

创建两个label

label内容中&A,&B表示添加快捷键,可通过alt+a,alt+b触发快捷键

Qt中Qlabel中写的文本,是可以指定快捷键的,通过&跟上一个字符表示快捷键,通过alt+字符来触发快捷键

在构造函数设置伙伴关系

可以通过点击选项或者alt+a,alt+b进行选中label,从而触发其绑定的伙伴

LCD Number

QLCDNumer是一个专门用来显示数字的控件,类似于老实计算机的效果

核心属性

例:

实现一个用QLCDNumber的倒计时

在ui界面创建一个LCDNumber

在构造函数处进行初始化

实现每秒钟值减一------QTimer

通过这个类创建的对象,会产生一个timeout信号,可以通过statrt的方式来开启定时器,并在参数中设定timeout信号的触发周期,结合connect将timeout信号绑定到label的槽函数中,通过结合timeout信号好槽函数来实现lable值每秒减一

在头文件中声明槽函数,定义成员变量

定义槽函数,看是否能正常是否信号

在槽函数中实现LCDNumber中的数字减一

不使用QTimer,而采用在构造函数处进行循环修改LCDNumber数值实现倒计时

发现等待一段时间后widget窗户才弹出,并且lcdnumber值为0

因为循环是在widget构造函数处实现,需将构造函数执行完毕后才能进行widget窗口显示,所以widget窗口出来时,循环已经结束,值变为0

如果用一个线程实现构造函数,一个线程实现循环能实现倒计时吗?

窗口未生成,出现异常

因为Qt中,界面是由一个专门的线程负责维护与更新(主线程)

对于GUI来说,Qt为了保证修改界面过程中,线程安全不受影响,禁止主线程之外的线程直接修改页面

槽函数默认是主线程调用

ProgressBar

QProgressBar表示一个进度条

核心属性

例:

实现简单的自动增长的进度条

创建一个progress bar

设置初始值

在头文件声明槽函数和timer

给progressBar进行初始化,创建QTimer对象,连接信号和槽函数,启动timer

定义槽函数

styleSheet

自定义进度条样式

在ui界面找到progressBar的sytleSheet属性

进行自定义

QProgressBar::chunk是选择器,表示选中progressBar和其中的chunk(进度条)

但是此时当前进度数字位置发生改变,通过alignment进行修改,使其居中对齐

此时是将QTimer的头文件包含到widget.h中,若将QTimer头文件包含到widget.cpp中仍然能正常使用QTimer

但在widget.h文件中用到了QTimer,但没包含QTimer头文件,为什么不会报错?

Qt内部提供专门的头文件,包含了Qt中所有类的前置声明,但是若要真正使用相关头文件内容,还是需要进行头文件的包含

为什么提供类的前置声明?

提高编译速度,通过前置声明的方式减少头文件的包含

Calendar Widget

QCalendarWidget表示一个日历

如:

核心属性:

重要信号

例:

在ui界面创建calendarwidget

转到它的selectionChangde信号的槽函数

定义槽函数后,点击日期就会输出对应日期信息

再在ui界面创建一个label,用于打印当前选中的日期信息

相关文章:

  • 学习设计模式《二》——外观模式
  • 快手本地生活2024年GMV同增200%,“新线城市+AI”将成增长引擎
  • LabVIEW油气井井下集成监测系统
  • 492Q 型气缸盖双端面铣削组合铣床总体设计
  • OpenGauss 数据库介绍
  • CentOS 7 linux系统从无到有部署项目
  • Python爬虫第17节-动态渲染页面抓取之Selenium使用下篇
  • 使用Selenium和Python实现Web抓取指南
  • vscode按Ctrl+Shift+B无法编译no build to run found,没有catkin_make build怎么办
  • ESP32 搭建IDF+Vscode环境(详细教程)
  • 深度学习中的概念——元素积(哈达玛积)
  • C++学习:六个月从基础到就业——内存管理:堆与栈
  • RHCE的简单配置
  • 设计模式从入门到精通之(五)观察者模式
  • 使用 Axios 进行 API 请求与接口封装:打造高效稳定的前端数据交互
  • Hexo+Github+gitee图床零成本搭建自己的专属博客
  • Google澄清:元描述标签不会直接提升网站排名
  • 一键模仿图片风格,图生生APP,实现随时随地“生图自由“
  • WPF常用技巧汇总
  • 旅游资源网站登录(jsp+ssm+mysql5.x)
  • 工人日报评一些旅行社不收记者律师:“拒客黑名单”暴露心虚病
  • 著名世界语教育家、翻译家魏以达逝世
  • 被指违反代理协议遭南航暂停售票资格,去哪儿网:今起恢复
  • 习近平致电祝贺诺沃亚当选连任厄瓜多尔总统
  • 上海黄金交易所:贵金属价格波动剧烈,提示投资者做好风险防范
  • 人民日报头版开新栏:收官之年干劲满,决战决胜勇争先