一、QLabel
这个控件是用来显示文本和图片的,其具有如下属性

首先我们来看其文本格式:
纯文本就是最普通的文本,然后富文本就是内容更丰富的的文本,其支持html。
下面我们来设置一下其文本格式,感受其样式有何变化。

可以看到文本的显示方式是有很大区别的,而且,当我们在普通文本中添加富文本或者markdown的一些属性,其实是不会有效果的。

然后有个问题就是,我们图片的大小肯定不是固定的,也就是说,如果我们需要将图片全部都覆盖到整个窗口,那么我们还可以将其自动拉伸的方式,使得图片覆盖到整个窗口。

然后还有个问题,当我们的图片大小被设置好,那么未来我们的窗口变化,那么我们的图片的大小是不会变化的,所以我们还需要将其设置成变化的。
在Qt中,对于用户的操作实际上是分为两类的,一种就是前面我们讲到的信号,然后另外一种就是事件。
当我们用户使用拖拽修改窗口的大小的时候,就会触发resize事件(resizeEvent)
然后向resize这种事件其是一种连续变化的事件,那么用户进行拖拽的这个操作实际上是会触发一系列的resizeEvent
所以此时我们可以借助resizeEvent来完成这个对于用户拖拽窗口,然后图片的大小也要进行变化的操作。

这个函数的形参,其包含了当我们进行拖拽操作的时候,此时窗口尺寸的数值。
下面我们再来看其文本对齐方式的效果:
对于文本对齐要使用到:setAlignment

当我们的文本非常长的话,那么我们就要将其进行换行处理,所以我们将其设置为下面的情况就可以实现自动换行操作:

然后我们还可以设置文本的缩进:

这个传入的50参数就是要缩进的像素点。
那么对于这个缩进,如果我们和上面的换行进行配合使用,那么其第二行也会出现缩进的效果,所以后面如果我们只是要第一行有缩进的效果,那么可以再使用CSS中的一些接口
然后还有一个是可以设置其边距,那么这个边距是会使得文本的x,y设置为传入的参数。

我们的Labie还可以设计伙伴关系:
下面我们创建两个Labie和radioButton
二、QLCDNumber
QLCDNumber这个控件是专门用来显示数字的,其类似于老式计算器的效果:

去有如下属性:

要注意的是,设置value和intvalue的方法名字为display,而不是setValue或者setIntValue
下面我们使用这个控件实现一个倒计时的功能:
首先,我们给这个显示控件设置一个初始值。
然后这个功能的要点就是实现每隔一秒,然后显示的数值就-1,然后根据初始值决定这个逻辑的执行次数。
那么我们就要一个定时器的效果,但是在C++标准库中没有提供定时器的实现,Boost中提供了。
在我们的Qt中也提供了对应的定时器,Qt中的定时器是结合了信号和槽的。
QTimer
通过这个类创建出来的对象,其会产生一个timeout这样的信号,然后我们可以通过start方法来开启定时器,并且在参数中设定触发timeout的周期。
结合connect,把这个timeout信号绑定到需要的槽函数中,那么就可以执行逻辑,然后修改QLCDNumber中的数据了。

那么我们是否可以不使用QTimer的函数,使用window中的sleep和一个循环来实现呢?
下面我们直接通过代码来看:

这个代码虽然能够编译成功并运行,但是我们发现其效果并不是我们预期中的。
这是为啥呢?
在我们的Qt中,显示是在执行完构造,然后执行下面的show函数才能实现显示的效果,那么当我们执行完构造吗,此时的数值已经减为0了,我们可以通过这个代码去实践一下,我们会发现其构建的时候非常慢,这是因为在构造函数中,我们在进行倒计时操作。

那么如果我们创建一个新线程来实现倒计时操作,然后呢主线程去完成构造函数,那么其就执行到show这个操作了,是否可行呢?

这个代码同样是不⾏的。Qt中规定,任何对于GUI上内容的操作,必须在主线程中成。像Widget构造 函数,以及connect连接的slot函数,都是在主线程中调⽤的。⽽我们⾃⼰创建的线程则不是。 当我们⾃⼰的线程中尝试对界⾯元素进⾏修改时,Qt程序往往会直接崩溃。
三、ProgressBar
这个控件是用来显示一个进度条:

其有如下属性:

下面我们来使用其看看效果:

我们设置其1秒钟内实现进度条增加十次

在实际开发中,进度条的取值,往往是根据当前任务的实际进度来进⾏设置的。 ⽐如需要读取⼀个很⼤的⽂件,就可以获取⽂件的总的⼤⼩,和当前读取完毕的⼤⼩,来设置进 度条的⽐例. 由于上⾯我们介绍了Qt禁⽌在其他线程修改界⾯,因此进度条的更新往往也是需要搭配定时 器来完成的。通过定时器周期触发信号,主线程调⽤对应的slot函数。再在slot函数中对当前的任务进度进 ⾏计算,并更新进度条的界⾯效果。
我们还可以设置进度条中的颜色,在Qt Designer右侧的属性编辑器中,找到QWidget的styleSheet 属性。

四、Calendar Widget
这个控件是用于显示一个日历:
其效果如下:

其有如下属性:

有如下操作:

如上就是我们在Qt中常使用的显示类控件