Qt常见按钮类控件属性及其使用
按钮类控件
QWidget控件继承关系
QPushButton
QPushButton继承自QAbstractButton---抽象类,是其按钮的父类
抽象类包含纯虚函数,无法创建对象
只能通过子类对纯虚函数进行重写,创建子类的实例
QAbstractButton相关属性(被QPushButton继承)
icon
给按钮加图标:
例子:
创建好项目后,通过qrc机制导入图片
在当前项目创建资源文件
导入图片
在Qt Creator中向资源文件导入图片后,切换到代码界面无法通过点击qrc文件进入资源导入界面,可用通过点击文件切换再次进入qrc文件
在ui界面创建一个按钮
在widget构造函数实现自定义pushbutton图标
实现
但是图标尺寸过小,可用进行设置
shortCut
给按钮添加快捷键
相关接口:
setShortcut(QKeySequence());
设置控件的快捷键为QKeySequence构造的字符的按键
例:
实现通过给上下左右按钮添加快捷键,实现通过快捷键控制按钮移动
先创建资源文件,给每个按钮设置图标
将前缀设置为/后,addfiles
创建一个图片文件夹,在文件夹内添加4个方向的图标
再将文件夹内所有文件导入资源文件
编辑ui界面
将按钮内文本删除,并设置其对应的objectname
在构造函数导入控件图标
再在构造函数对图标大小进行调整
再设置四个方向键的槽函数,实现控制方块移动
实现点击方向键控制target按钮进行移动
给四个按钮添加快捷键shortCut,实现通过键盘按键控制target按钮移动
在构造函数实现,从而实现控件一创建就可以通过快捷键操作
从而实现快捷键的绑定
还可以通过枚举创建快捷键
采用下拉的方式找到Qt枚举的按键进行设置
是否支持连发?
当键盘按住某个方向键不动时,会持续移动
但是若用鼠标按住方向键不动时,不会进行持续移动
因为键盘快捷键默认就是连发的,但是鼠标点击按钮不是
需设置autoRepeat属性才能实现鼠标点击按钮连发
autoRepeat
相关接口
setAutoRepeat
设置控件鼠标点击的连发
从而实现通过键盘快捷键和鼠标点击控件都能实现连发
Radio Button
QradioButton是单选按钮,可以在多个选项中选择一个
同样也是QAbstractButton和QWidget的子类,具有相同属性
和RadioButton直接相关的属性
例:
创建两个radiobutton,修改相关内容和objectname
再创建一个label标签用于输出选项
设置他们的槽函数,更新label内容
此时多个选择中只能选择一个,具有排他属性
程序在启动时是没有选中选项的,可以添加默认选项,在构造函数实现,使控件一创建就设置默认选项
如;
也可以禁用其它选项,同样在构造函数实现
使女的选项无法被选中,但是此时任然可用响应点击信号,label内容被修改
因为setCheckable只能使按钮不被选中,但是仍然可用响应点击事件
可用进行设置,使其不能响应点击事件,也不能被选中
RadioButton的四个信号
创建四个radiobutton
给第一个定义clicked(bool)带参信号的槽函数
第二个定义pressed信号的槽函数
第三个定义released信号的槽函数
第四个定义带参的toggled信号
运行后点击第一个按钮,触发信号---clicked
第二个按钮只需要鼠标按下不需要抬起就能触发信号---press
第三个按钮需要鼠标按下并抬起后才能触发信号---released
第四个按钮,第一次从选中别的按钮到选中第四个,状态由false改为true,触发信号,从选中第四个按钮的状态点击别的按钮,状态由true变为false,也触发第四个按钮的信号
基于RadioButton实现一个简单的模拟点餐功能
在ui界面创建三个label用来描述选项
添加选项---radio button,要求每种类别只能选择一项
此时运行程序后,发现在所有选项中只能选中一个
而不是要求的每种都能选择一个
因为radio button默认是排它的,一旦界面上需要存在多组“单选”按钮时,要求组和组之间不要相互影响,需要使用QButtonGroup类,对单选按钮进行分组
QButtonGroup
对单选按钮进行分组
在构造函数实现分组,实现一构建好按键就能进行分组
从而实现在每个组内进行单选
Check Box
QCheckBox
表示复选按钮,可用允许选中多个,和QCheckBox最相关的属性也是checkable和checked都是继承自QAbstractButton
QCheckBox的独有属性tristate用来实现“三态复选框”
例:
先创建一个label标签,用来描述选项
再创建四个可供多选的checkbox
创建一个PushButton用来提交选择
实现用户进行选择(可多选)并提交后,在标签处显示用户选中内容
定义pushbutton的槽函数
从而实现选择多个选项后,点击确认后将选中结构输出到label进行显示