【Qt】--常用控件(按钮类控件)

一、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

那么我们下面可以用来实现一个多选按钮:

例如我们现在有三个事件可以选择,然后其是可以都选择的。

相关推荐
FRing035 分钟前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊10 分钟前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆6751 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩2 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
Hhy_11074 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
starzy19904 小时前
深入理解Scala函数定义:从方法到函数的类型跨越
开发语言·scala
starzy19904 小时前
深入理解Scala递归函数:从栈溢出到尾调用优化
开发语言·scala
三*一4 小时前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript
YSL0701244 小时前
C++基础
开发语言·c++
若亦_4 小时前
Java中关于this的三种用法
java·开发语言·intellij-idea