)
一、QLabel这个控件是用来显示文本和图片的其具有如下属性首先我们来看其文本格式纯文本就是最普通的文本然后富文本就是内容更丰富的的文本其支持html。下面我们来设置一下其文本格式感受其样式有何变化。可以看到文本的显示方式是有很大区别的而且当我们在普通文本中添加富文本或者markdown的一些属性其实是不会有效果的。然后有个问题就是我们图片的大小肯定不是固定的也就是说如果我们需要将图片全部都覆盖到整个窗口那么我们还可以将其自动拉伸的方式使得图片覆盖到整个窗口。然后还有个问题当我们的图片大小被设置好那么未来我们的窗口变化那么我们的图片的大小是不会变化的所以我们还需要将其设置成变化的。在Qt中对于用户的操作实际上是分为两类的一种就是前面我们讲到的信号然后另外一种就是事件。当我们用户使用拖拽修改窗口的大小的时候就会触发resize事件(resizeEvent)然后向resize这种事件其是一种连续变化的事件那么用户进行拖拽的这个操作实际上是会触发一系列的resizeEvent所以此时我们可以借助resizeEvent来完成这个对于用户拖拽窗口然后图片的大小也要进行变化的操作。这个函数的形参其包含了当我们进行拖拽操作的时候此时窗口尺寸的数值。下面我们再来看其文本对齐方式的效果对于文本对齐要使用到setAlignment当我们的文本非常长的话那么我们就要将其进行换行处理所以我们将其设置为下面的情况就可以实现自动换行操作然后我们还可以设置文本的缩进这个传入的50参数就是要缩进的像素点。那么对于这个缩进如果我们和上面的换行进行配合使用那么其第二行也会出现缩进的效果所以后面如果我们只是要第一行有缩进的效果那么可以再使用CSS中的一些接口然后还有一个是可以设置其边距那么这个边距是会使得文本的x,y设置为传入的参数。我们的Labie还可以设计伙伴关系下面我们创建两个Labie和radioButton二、QLCDNumberQLCDNumber这个控件是专门用来显示数字的其类似于老式计算器的效果去有如下属性要注意的是设置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中常使用的显示类控件