常用控件 (二)

显示类控件

QLabel

QLabel 控件,可以用来显示文本和图片;

QLabel核心属性如下:

属性说明
textQLabel中的文本内容
textFormatQLabel中文本内容的格式:Qt:: PlainText 纯文本; Qt::RichText 富文本(支持html标签); Qt::MarkdownText markdown格式;Qt::AutoText 根据文本内容,自动觉得文本格式;
pixmapQLabel中的图片
scaledContents设为 true 表⽰内容⾃动拉伸填充 QLabel,设为 false 则不会⾃动拉伸
alignment对⻬⽅式.可以设置⽔平和垂直⽅向如何对⻬.
wordWrap设为 true 内部的⽂本会⾃动换⾏.设为 false 则内部⽂本不会⾃动换⾏.
indent设置⽂本缩进. ⽔平和垂直⽅向都⽣效.
margin内部⽂本和边框之间的边距.不同于于 indent, 但是是上下左右四个⽅向都同时有效.⽽ indent 最多只是两个⽅向有效(具体哪两个⽅向有效取决于 alignment )
openExternalLinks是否允许打开⼀个外部的链接.(当 QLabel ⽂本内容包含 url 的时候涉及到)
buddy给 QLabel 关联⼀个 “伙伴” , 这样点击 QLabel 时就能激活对应的伙伴.例如伙伴如果是⼀个 QCheckBox, 那么该 QCheckBox 就会被选中.

eg1: 显示三个不同格式文本(普通文本、html文本、markdown文本)
在这里插入图片描述
第一个QLabel显示普通文本,第二个文本框显示html文本,第三个文本框显示markdown文本

  1. 在文本框1中输入<b> 你好< /b>,文本框2中给输入相同的东西,下面是C++代码:
    在这里插入图片描述
  2. 在文本框1中输入**你好 **,在问本框3中输入同样的内容:
    在这里插入图片描述

eg2: 设置一个铺满窗口的图片;
图片素材如下:
在这里插入图片描述
因此对应的C++代码:
在这里插入图片描述
可以看到,我们的坤坤就已经铺满全屏了,但是这有一个问题,就是随着我们拉动我们的widget窗口的大小,我们发现,我们的坤坤,还是保持原有大小,并没有随着窗口的改变而铺满全场:
在这里插入图片描述
这是为什么?
因为上面的设置是在widget构造函数里面设置的,是一次性的,当程序跑起来过后,坤坤会铺满初始屏幕,但是之后窗口大小在发生改变的话,那么坤坤还是会保持原样不回变化;
显然,这样的结果是不合理的,我们现在希望,坤坤能够随着窗口的大小的改变而发生改变:
为了解决这个问题,我们可以在Widget中重写resizeEvent函数,这个函数会在窗口大小发生变化时自动调用,更改过后的C++代码:
在这里插入图片描述
注意: 上面的resizeEvent函数我们没有手动调用,但是能够在窗口大小发生变化时被自动调用,这个过程就是依赖于C++中的多态来实现的。Qt框架内部管理着QWidget对象表示咱们的窗口。在这个窗口发生改变的时候,Qt就会自动调用resizeEvent函数;但是由于实际上这个表示窗口的并非是QWidget,而是Widget。此时虽然是通过父类调用函数,,但是实际上执行的是子类的函数,也就是我们重写过后的resizeEvent函数。此处这种用法实际上叫“事件”,是另一种表示用户操作的用法,在之前我们就已经学习了使用信号来表示用户的操作,但是现在同样可以使用“事件”来表示用户的操作;

eg3: 文本对齐、自动换行、缩进、边距;

  1. 文本对齐
    在这里插入图片描述
    上图是文本在QLabel中的原始对齐方式,垂直对其+靠左对齐,现在我们想让他居中对齐,也就是垂直对齐+水平对齐
    在这里插入图片描述
  2. 自动换行
    在这里插入图片描述
    我们可以发现,当文本内容很长的时候,QLabel是不会自动换行的,那么后续的内容也就无法被看到,为了解决这个问题,我们只需开启自动换行功能即可:
    在这里插入图片描述
  3. 缩进
    在这里插入图片描述
    上图是没有设置缩进的情况;
    下面我们使用C++代码来设置缩进
    在这里插入图片描述
  4. 边距
    在这里插入图片描述
    上图是没有设置边距的样子
    下面使用C+代码来设置边距:在这里插入图片描述

eg4: 设置伙伴
在这里插入图片描述
对应的C++代码:
在这里插入图片描述
通过设置伙伴过后,我们发现,选项之间不仅可以使用点击来进行切换,还可以使用“alt + A”或"alt + B"的快捷键来进行切换;
注意: 此处把QLabel中的文本设置为“快捷键&A”这样的形式,其中&符号后面跟着的字符,就是快捷键,可以通过alt+A的方式来触发该快捷键;但是这里的快捷键与QPushButton中的快捷键不同,就是这里的快捷键需要搭配alt和单个字母的方式才能触发;

QLCDNumber

QLCDNumer 是⼀个专⻔⽤来显⽰数字的控件. 类似于 “⽼式计算器” 的效果.
在这里插入图片描述

核心属性

属性说明
intValueQLCDNumber 显⽰的数字值(int).
valueQLCDNumber 显⽰的数字值(double).和 intValue 是联动的.例如给 value 设为 1.5, intValue 的值就是 2.另外, 设置 value 和 intValue 的⽅法名字为 display , ⽽不是 setValue 或者 setIntValue .
digitCount显⽰⼏位数字.
mode数字显⽰形式.(只有⼗进制的时候才能显⽰⼩数点后的内容.)
segmentStyle设置显⽰⻛格.
smallDecimalPoint设置⽐较⼩的 ⼩数点.

eg1: 倒计时
在界面上创建一个QLCDNUmber,并设置初始值为10
在这里插入图片描述
然后,现在我们希望每隔1s就减少1,因此我们需要一个定时器,在Qt官方中,已经为我们内置好对应的定时器了,我们只用包含对应的头文件进行使用即可,这个定时器的大致工作原理就是,这个定时器会间隔一定的周期发出一个timeout信号,我们只需要捕捉这个信号,然后进行操作即可,这个周期可以有我们程序员自己设置,因此对应的C++代码为:
在这里插入图片描述
针对上诉这个问题,存在两个问题;

  1. 我们能不能在Widget构造中自己写一个循环,然后自己sleep一秒,然后再进行减1操作呢?
    我们写代码来实践一下:
    在这里插入图片描述
    最终呈现出来的结果就是,窗口再经过10s过后才出来的,并且一出来就显示数字0,并没有出现像上诉一样的倒计时显示;
    这其实也是能够理解的,因为我们是将这个倒计时代码段写在Widget的构造函数内部的,在构造函数内部窗口都还没构造出来,而QLCDNumber控件又是依赖于Widget窗口的,自然的在没有Widget窗口之前不回存在QLCDNumber,当10s时间过去后,value最后一次被设置的值为0,那么最后一次显示出来的就是0;
  2. 我们用另一个线程来专门进行倒计时,让主线程完成窗口的创建:
    在这里插入图片描述
    我们可以看到,程序直接出现了错误,因为,对于一个GUI程序来说,他们只允许主线程来操作各种控件,不允许多线程来操作,因为在多线程下可能出现线程安全和效率低下的问题,因此Qt官方直接就禁止了其它线程来修改窗口上的控件

QProgressBar

使⽤ QProgressBar 表⽰⼀个进度条.
在这里插入图片描述
核⼼属性

属性说明
minimum进度条最⼩值
maximum进度条最⼤值
value进度条当前值
alignment⽂本在进度条中的对⻬⽅式.
textVisible进度条的数字是否可⻅.
orientation进度条的⽅向是⽔平还是垂直
invertAppearance是否是朝反⽅向增⻓进度
textDirection⽂本的朝向.
format展⽰的数字格式.

eg1: 设计一个进度条按照时间进行增长,100ms增长1次
在这里插入图片描述
对应的C++代码如下:
在这里插入图片描述
注意: 在实际开发中, 进度条的取值, 往往是根据当前任务的实际进度来进⾏设置的.
⽐如需要读取⼀个很⼤的⽂件, 就可以获取⽂件的总的⼤⼩, 和当前读取完毕的⼤⼩, 来设置进
度条的⽐例.
由于上⾯我们介绍了 Qt 禁⽌在其他线程修改界⾯, 因此进度条的更新往往也是需要搭配定时
器来完成的.
通过定时器周期触发信号, 主线程调⽤对应的 slot 函数. 再在 slot 函数中对当前的任务进度进
⾏计算, 并更新进度条的界⾯效果.

eg2: 创建一个其它颜色的进度条
可以通过前文我们学习的QSS来进行修改:
在这里插入图片描述
同理,对应的属性设置:
在这里插入图片描述
最后实现出来的效果如下:
在这里插入图片描述

QCalendarWidget

QCalendarWidget 表⽰⼀个 “⽇历” , 形如:
在这里插入图片描述
核⼼属性

属性说明
selectDate当前选中的⽇期
minimumDate最⼩⽇期
maximumDate最⼤⽇期
firstDayOfWeek每周的第⼀天(也就是⽇历的第⼀列) 是周⼏
gridVisible是否显⽰表格的边框
selectionMode是否允许选择⽇期
navigationBarVisible⽇历上⽅标题是否显⽰
horizontalHeaderFormat⽇历上⽅标题显⽰的⽇期格式
verticalHeaderFormat⽇历第⼀列显⽰的内容格式
dateEditEnabled是否允许⽇期被编辑

重要信号:

信号说明
selectionChanged(const QDate&)当选中的⽇期发⽣改变时发出
activated(const QDate&)当双击⼀个有效的⽇期或者按下回⻋键时发出,形参是⼀个QDate类型,保存了选中的⽇期
currentPageChanged(int,int)当年份⽉份改变时发出,形参表⽰改变后的新年份和⽉份

eg1:
获取选中的⽇期
在这里插入图片描述
并且给activated信号和selectionChanged信号绑定对应的槽函数:
在这里插入图片描述
最后运行效果:
在这里插入图片描述

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南猿北者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值