【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

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

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

相关推荐
范什么特西1 小时前
一些常用名词
开发语言·前端·javascript
吴声子夜歌2 小时前
ApacheCommons——commons-configuration2(多数据源配置统一管理与热加载)
java·开发语言·算法·apache
乌夷2 小时前
JavaScript 的事件循环
开发语言·javascript·ecmascript
星星落进兜里2 小时前
Java虚拟机面试题-补充
java·开发语言
吴声子夜歌5 小时前
ApacheCommons——commons-pool2(高性能通用对象池框架)
java·开发语言·apache
kruptos10 小时前
分布式系统怎么“选主“?Raft 共识一次讲清
开发语言·分布式·php·共识算法
吴声子夜歌10 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
benchmark_cc11 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库11 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang