文章目录
- qt常用控件
- label
- LCD Number
- ProgressBar
- 结语
很高兴和大家见面,给生活加点impetus!!开启今天的编程之路!!
今天我们进一步c++11中常见的新增表达
作者:٩( ‘ω’ )و260
我的专栏:qt,Linux,C++进阶,C++初阶,数据结构初阶,题海探骊,c语言
欢迎点赞,关注!!
qt常用控件
label
在上篇文章我们已经讲解了label中的PixMap属性和scaledContents属性,
这里先创建4个label并给这些label设置好对应的边框,分别对于不同属性进行验证:
对齐方式:
水平垂直方向居中对齐:
如果我想同时具有这两个属性呢?
这里就不是跟跟设置快捷键的方式一样直接使用 + 了,这里需要使用按位或(|),来看:
那这里为什么是使用|呢?为什么不使用按位与呢?来看底层:
我们将常用的属性转换成二进制来看:
转换成二进制之后,当们如果想使用多种属性结合的话,使用按位或就能够同时将属于该两个位置的标记位设置成1(见1为1),这种设计方式颇具位图的思想了
自动换行:
我们来设置自动换行属性:
缩进:
这里我们设置缩进传递的参数是一个整形,代码前方缩进多少个像素。
细节:这里的缩进也会使换行的文本缩进,即label中的所有文本都会缩进,不同于css,label-indent只有第一行会缩进
边距:
这里我们主要来测试margine,indent只有两个方向上会缩进,但是margine会四个方向缩进:
label设置伙伴:
我们使用checkbox,当我们选择这个label的时候,此时这个checkbox也会被选择:
来看代码:
我们构建项目,会发现此时label都点击不了,但是我们可以使用快捷键对其进行点击:按下alt + a或者alt + b就能够对文本进行点击。此时建立伙伴关系的单选,复选按钮就会被点击:
注意:label的快捷键和PushButton的快捷键相差较大:前者文本必须设置&一个字母,使用快捷键必须使用alt + 该字母,而且,只能写一个字母,但是PushButton的快捷键就会比较宽松了
LCD Number
这个属性主要是用来显示数字和对数字进行操作~~
先来看api接口:
其实上面最重要的就是使用纯代码的形式设计数字不是使用setXXX,而是使用display接口,这里需要注意。
这里我们写一个关于计时器的案例:来看代码:
首先,我们来思考,既然是计时器,那么QLCDNumber显示的时间肯定是需要周期性的变化的,即每秒钟value数值需要减1。在qt中,有一个内置的类QTimer中有一个timeout信号,能够完成这样的周期性的操作
细节:使用QTimer时,肯定是需要先建立信号与槽的连接,随后再来开启定时器,而且,在槽函数中需要手动关闭定时器,所以应该创建一个QTimer的成员变量
为什么需要关闭定时器呢?因为不关闭定时器,一直执行周期性的动作,当数值减到0,此时计时器就会变成负数~~
我们先来看示例:
来看结果:
我们发现确实是每隔一秒,打印了一次日志,我们来完善槽函数
这样我们就实现了一个定时器功能了
我们再来想,能不能还有其他方式来设置定时器呢?比如:先睡眠一秒,随后再来修改显示屏上的数字。
首先,在qt中没有Sleep这个函数,Sleep是windows提供的api接口,vs是使用msvc编译器,所以可以使用windows提供的接口,但是qt使用的是Mingw编译器,但是在c++11中提供了sleep_for接口,也能实现和Sleep中类似的效果:
我们来看一下这个代码:
这里我们不重点看语法,因为我们linux线程还没有讲解:
我们来运行程序:
我们发现这次运行的时间比上次运行的时间更久,最后界面弹出来计时器时间直接为0了:
这个是什么原因呢?
我们来看,我们的休眠是在Widget的构造函数中执行的,即只有我们退出循环,此时构造函数才能够结束,而且我们界面的展示是在构造函数完成之后再来进行展示的,即其实计时器在正常工作,只是界面没有打印出来:
那我们如何解决呢?
我们再来创建一个新的线程,在新的线程中我们来完成休眠操作,这是界面就能够来显示了:
在构造函数中,我们创建了一个线程,创建了一个线程之后,构造函数就继续向下执行,随后就能够展示界面了。
来看结果:
我们发现程序异常终止了,这个是什么原因呢?
结论:在qt中,只能够由主线程(main函数)去修改Widget界面的内容,如果使用其他线程去修改界面的内容,程序就会直接终止,并且,信号与槽默认就是在主线程中进行调用的~~
所以,如果需要执行周期性的操作,还是推荐使用QTimer这个类中的timeout信号,别忘了打开和关闭定时器,而且需要挂到对象树上~~
ProgressBar
作用:告诉用户需要等待~~
api接口:
我先前面学习了QTimer来来执行周期性的执行同一个操作,那我们可以使用QTimer和ProgressBar结合,来慢慢增大这个进度条。
来看代码:
来看结果:
此时进度条就会慢慢的从0增长至100了~~
结语
今天的内容就分享到这里,不足之处欢迎留言之指出,感谢大家支持!!
锲而舍之,朽木不折;锲而不舍,金石可镂!!