一、Push Button
使用QPushButton表示一个按钮,这个前面我们已经进行过简单使用了。
QPushButton其继承自QAbstractButton
这个类是一个抽线类,其是其他按钮的父类。
对于这个类,我们可以看如下示意图:

抽象类:这个类包含了纯虚函数,其无法创建出实例对象
其要创建子类,然后重写上述的纯虚函数,那么其才能创建出子类的实例
前面我们提到的QWidget的属性,在此处的按钮也是存在的。
我们在Qt Designer中我们也可以看到其继承关系:

然后其有如下的属性:

1、Push Button添加图标
首先,我们和前面一样,对于这些小的图片资源,我们使用qrc的方式将其添加进来。

然后我们就可以使用该控件的setIocn来对其进行图片设置,然后我们还可以使用steIocnSize来设置控件大小。
2、给控件添加快捷键
前面我们实现了通过别的按钮,然后我们实现控制其中一个按钮的位置进行移动,不过那个移动我们是通过鼠标点击的方式实现的,那么下面我们还可以使用键盘的方式来进行移动。
那么我们先将各个控件的图片属性将进行设置,然后我们通过各个控件的槽函数,然后对这个按钮进行控制,不过我们要将其设置为通过键盘的方式来控制。

上面我们的基本样式已经实现,下面我们对其进行键盘的操作。
那么我们要将对应的控件和键盘进行绑定,就使用如下接口,这个绑定操作,我们在构造函数中就将其完成。

这个接口其参数是一个QKeySequnce类,那么其是一个序列。
然后上面的快捷键的设置方式,存在一个问题,就是,当我们设置的时候,难免会按错,那么此时是不会出现报错的,所以我们对于键盘的绑定,更推荐下面的方式进行设置。

通过Qt中给我们内置的枚举类型进行设置,然后如果我们需要这个按钮有两个键盘才触发,那么我们可以使用+的方式添加即可。
而且我们发现,我们一直按住一个键盘,那么其可以连续移动,但是我们的鼠标的话,就不行,那么如果我们需要按钮也可以实现鼠标按住,然后连续移动,那么可以给其添加一个属性:
autoRepeat(),然后其中设置为true即可。

二、QRadioButton
这个控件其是一个单选按钮,那么这个按钮在日常中我们肯定有使用过,就比如一些调查问卷,还有线上测试的单选题。
那么其和PushButton一样也是继承自QAbstractButton的
然后其有如下属性和QAbstractButton有很大的关系:

如上所示,对于这个按钮,其最大的特点就是,其默认是排他的。

然后我们还可以设置一个默认值,在程序开始的时候。
那么我们就在构造函数中进行设置。
还有就是如果我们将一个按钮设置为不可选中,那么我们可以使用下面这个方式:

不过要注意的是,这样设置,其是不可以被选择,但是呢还是可以被点击,所以其被点击事件还是会被触发,所以我们要将一个按钮设置为不可以用,那么直接将其状态禁用最好。
实际上,我们一个控件,对于事件也有很多种情况:

那么我们的QRadioButton控件,首先是clicked事件,那么这个是点击事件,然后就是pressed,那么这个是按下事件,然后released事件是松开事件,那么clicked就是这两个事件的综合。
然后toggled,这个信号就是当这个控件的checked发生变化,那么就会触发这个信号。
下面我们写代码,然后可以通过鼠标点击,鼠标点,还有松开,还有checked状态变化来验证:

下面我们可以基于QRadioButton实现一个简单的点餐功能:
大致和麦当当的套餐点餐一样,三件套,在几个汉堡中选择一个,然后小食选择一个,然后饮料选择一个。

那么如上就是我们的基本结构,但是我们要注意一个问题,我们前面提到,我们的QRadioButton默认是排他的,那么我们要的是选择三个,然后主食中的三个是排他的,小食和饮料也是如此。
那么我们就可以将其进行分组。

那么这样就可以选择三个了。
三、QCheckBox
这个是表示的一个复选按钮,那么其和QRadioButton的区别就是,其不具有排他性。
和QCheckBox 最相关的属性也是checkable 和checked ,都是继承⾃ QAbstractButton
那么我们下面可以用来实现一个多选按钮:
例如我们现在有三个事件可以选择,然后其是可以都选择的。
