Qt_按钮类控件
目录
1、QAbstractButton
2、设置带图标的按钮
3、设置带有快捷键的按钮
4、QRadioButtion(单选按钮)
4.1 QButtonGroup
5、QCheckBox
结语
前言:
按钮类控件是Qt中最重要的控件类型之一,该类型的控件可以通过鼠标的点击,或者键盘的按键触发信号。常用的按钮有:1、单击按钮,2、单选按钮,3、多选按钮,根据不同的场景选择合适的按钮。这些按钮的功能大同小异,原因就是他们都继承自QAbstractButton类。
1、QAbstractButton
QAbstractButton是一个抽象类,他是所有按钮的父类,这也使得继承该类的按钮的大部分属性是相同的,继承示意图如下:

可以在Qt Designer中更为直观的看到QAbstractButton的属性和继承关系,如下图:

这些属性的详细介绍如下:
| text | 设置按钮的文本 |
| icon | 设置按钮的图标 |
| iconSize | 设置按钮图标的尺寸 |
| shortCut | 设置按钮对应的快捷键 |
| autoRepeat | 当⿏标按住按钮不放时,是否会一直触发事件。true:会,false:不会 |
| autoRepeatDelay | 为true时:按住按钮需要多久才会一直触发事件(类似前摇) |
| autoRepeatInterval | 为true时:重复触发的周期 |
这里随便回顾一下,从上述Qt Designer的继承关系中可以看到,QAbstractButton还继承了QWidget,这是合情合理的,因为只要是控件就必须继承QWidget,而按钮类属于控件的一个分支,所以应当继承QWidget。
2、设置带图标的按钮
如今是界面设计中,大部分按钮都是带有图标的,这么设计可以增加界面的丰富度,还能够清楚明了的知道该按钮的作用。首先将设置的图标存放到qrc文件中,然后在代码中依据图标的路径拿到该图标即可设置。(qrc讲解见:QWidget属性介绍)
代码如下:
#include "widget.h"
#include "ui_widget.h"#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* p = new QPushButton("按钮",this);QIcon q(":/rose.png");//该图标存放在qrc中p->setIcon(q);//设置图标p->setIconSize(QSize(50,50));//将该图标设置为50*50像素
}Widget::~Widget()
{delete ui;
}
运行结果:

3、设置带有快捷键的按钮
除了可以给按钮设置图标外,还可以给按钮设置快捷键,通过键盘的方式点击按钮,并执行对应的槽函数。Qt提供了方法setShortcut给按钮设置快捷键,该方法介绍如下:
void setShortcut(const QKeySequence &key)
//参数是一个QKeySequence对象//QKeySequence的构造方式可以直接用键盘按键构造,比如用字符串“w”表示键盘上是w键
//也可以用系统内置的表示方式,比如 Qt::Key_W 也表示键盘上是w键
使用控件调用上述方法,则使用快捷键就等于点击该控件,测试代码如下:
1、widget.h文件(槽函数的实现):
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
//#include <QRect>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void up(){QRect q = p->geometry();p->move(q.x(),q.y()-10);}private:Ui::Widget *ui;QPushButton* p;
};
#endif // WIDGET_H
2、widget.cpp文件:
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);p = new QPushButton("向上移动",this);p->setShortcut(QKeySequence("w"));//p->setShortcut(QKeySequence(Qt::Key_W));//该写法也可以设置w的快捷键p->move(400,400);//设置按钮的初始位置connect(p,&QPushButton::clicked,this,&Widget::up);
}Widget::~Widget()
{delete ui;
}
这里的测试结果不方便用图片的形式表现出来,大概的效果就是按住键盘w键,会让按钮向上移动。题外话:上述例子中,快捷键默认可以重复触发控件,但是鼠标点击不能重复触发控件,重复触发表示一直点击按钮时,按钮会一直产生事件,所以上述代码一直按住按住w键,则按钮会一直向上移动,但是鼠标一直点击按钮,按钮只会移动一次。
可以在构造函数内添加下面代码即可实现鼠标的重复触发:
p->setAutoRepeat(true);
4、QRadioButtion(单选按钮)
上述的QPushButton是单击按钮,当在一些需要选择选项的场景下,QPushButton就不能完成期望的效果,这时候需要使用QRadioButtion来实现多选一的效果,并且QRadioButtion继承自QAbstractButton,因此他还是属于按钮类型的。
QAbstractButton中与QRadioButtion关系较大的属性如下:
| checkable | 表示该按钮能否被选中,注意不可被选中不代表该按钮不能被点击 |
| checked | 表示该按钮是否已经被选中 |
| autoExclusive | 选中⼀个按钮之后是否会取消其他按钮的选中( Q RadioButtion默认为true ) |
实现一个多选一的场景,首先在ui文件中进行界面拖拽式的创建控件,然后再在代码中对这些控件进行槽函数处理,生成的ui界面如下:

1、widget.h的代码:
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_radioButton_one_clicked();//篮球的槽函数void on_radioButton_two_clicked();//足球的槽函数void on_radioButton_three_clicked();//其他的槽函数private:Ui::Widget *ui;
};
#endif // WIDGET_H
2、widget.cpp的代码:
#include "widget.h"
#include "ui_widget.h"#include <QRadioButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_radioButton_one_clicked()
{ui->label->setText("请选择你的兴趣:篮球");
}void Widget::on_radioButton_two_clicked()
{ui->label->setText("请选择你的兴趣:足球");
}void Widget::on_radioButton_three_clicked()
{ui->label->setText("请选择你的兴趣:其他");
}
测试结果:

从结果可以发现,由于QRadioButtion本身就是具有“排他行为”,因此选中了一个选项后,之前的选择就会消失,符合多选一的逻辑。
4.1 QButtonGroup
上述的单选场景只适用于整个界面中只存在一道选择题,如果该界面中有多道选择题,那么就会出现多道题中只能选择一个选项,显然是不符合预期的。于是,Qt推出控件QButtonGroup,该控件的作用是分组,即组与组之间的QRadioButtion的选中不会影响彼此。
模拟一个点餐的代码,代码如下:
#include "widget.h"
#include "ui_widget.h"#include <QButtonGroup>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QButtonGroup* group1 = new QButtonGroup(this);QButtonGroup* group2 = new QButtonGroup(this);group1->addButton(ui->Hamburg1);group1->addButton(ui->Hamburg2);group2->addButton(ui->drink1);group2->addButton(ui->drink2);
}Widget::~Widget()
{delete ui;
}
运行结果:

通过结果可以发现,香辣鸡腿堡选项和可乐选项不具有“排他反应”。
5、QCheckBox
QCheckBox是复选按钮(多选按钮),即多个QCheckBox的按钮之间不存在互斥机制,通常作用于需要选中多个选项的场景。那上述点餐代码中为什么不用QCheckBox按钮呢?因为点餐代码中需要让同一组的按钮存在互斥机制,而QCheckBox按钮即使在同一组内也不会发送互斥。
测试QCheckBox,先设计一个ui界面如下:

选择选项后点击确定,这时候就会在标题中显示选中的选项,代码如下:
#include "widget.h"
#include "ui_widget.h"#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_1_clicked()
{QString s("请选择你今天的目标:");if(ui->eat->isChecked()){s+=ui->eat->text();}if(ui->sleep->isChecked()){s+=ui->sleep->text();}if(ui->hit->isChecked()){s+=ui->hit->text();}ui->label->setText(s);qDebug()<<s;
}
运行结果如下:

结语
以上就是关于按钮类控件的讲解,作为Qt中常用控件之一,按钮类控件还是比较重要的,理解了上述这些按钮类控件就足矣满足大部分场景,毕竟在实际生活中也是以上的按钮类型出现的更多一些。
最后如果本文有遗漏或者有误的地方欢迎大家在评论区补充,谢谢大家!!
相关文章:
Qt_按钮类控件
目录 1、QAbstractButton 2、设置带图标的按钮 3、设置带有快捷键的按钮 4、QRadioButtion(单选按钮) 4.1 QButtonGroup 5、QCheckBox 结语 前言: 按钮类控件是Qt中最重要的控件类型之一,该类型的控件可以通过鼠标的点击…...
union 的定义和基本结构以及用途
在 C 语言中,union(联合体) 是一种数据结构,它允许多个成员共享相同的内存空间。换句话说,联合体中的所有成员都存储在同一块内存区域,不同的成员会占用相同的内存地址,但在同一时刻只能保存一个…...
混合整数规划及其MATLAB实现
目录 引言 混合整数规划的基本模型 混合整数规划的求解方法 MATLAB中的混合整数规划实现 示例:多变量系统的混合整数规划 表格总结:混合整数规划的求解方法与适用场景 结论 引言 混合整数规划(Mixed Integer Programming, MIP…...
【数据结构】6——图1,概念
数据结构6——图1,概念 文章目录 数据结构6——图1,概念基本概念图的分类图的表示方法 基本概念 由 顶点(Vertex) 和 边(Edge) 组成的集合。顶点表示图中的点,而边表示顶点之间的连接。记为 G …...
技术周总结 09.09~09.15周日(C# WinForm WPF)
文章目录 一、09.09 周一1.1) 问题01: Windows桌面开发中,WPF和WinForm的区别和联系?联系:区别: 二、09.12 周四2.1)问题01:visual studio的相关快捷键有哪些?通用快捷键编辑导航调试窗口管理 2…...
4K投影仪选购全攻略:全玻璃镜头的当贝F6,画面细节纤毫毕现
在当今的投影市场上,4K投影仪已经成了主流产品,越来越多家庭开始关注如何选择一款性价比高、口碑好的4K投影仪。4K投影仪其实指的是具备3840*2160像素分辨率投影仪,它能够提供更清晰、更细腻、更真实的画面效果。 那么4K投影仪该怎么选&…...
除了字符串前导的*号之外,将串中其它*号全部删除
要求 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。 例如,字符串中的内容为:-**…...
SpringBoot开发——使用@Slf4j注解实现日志输出
文章目录 1、Lombok简介2、SLF4J简介3、实现步骤3.1 创建SpringBoot项目3.2 添加依赖3.3 使用 Slf4j 注解3.4 输出日志信息 4、结论 在现代Java开发中,日志记录是至关重要的。它不仅帮助开发者调试代码,还便于监控系统运行状态和性能。 Lombok 和 SLF4J …...
VSCode拉取远程项目
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
【已解决】SpringBoot3项目整合Druid依赖:Druid监控页面404报错
文章标题 问题描述原因分析解决方案参考资料 问题描述 最近,笔者在SpringBoot3项目中整合Druid连接池时,偶然翻到一条介绍Druid监控的短视频,兴致盎然之下尝试设置了一下Druid监控。 But,按照视频中提供的yml参数对照设置&#x…...
【算法】滑动窗口—找所有字母异位词
“找到字符串中所有字母异位词”的难度为Medium,看一下题目: 给定一个字符串 S 和一个非空字符串 T,找到 S 中所有是 T 的字母异位词的子串,返回这些子串的起始索引。 所谓的字母异位词,其实就是全排列,原题…...
Vue安装及环境配置【图解版】
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 目录 一.node.js的安装…...
绕过CDN查找真实IP方法
1、前言 在新型涉网案件中,我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集,但是现在网站大多都部署了CDN,将资源部署分发到边缘服务器 实现均衡负载,降低网络堵塞,让用户能够更快地访问自己…...
Qt与MQTT交互通信
MQTT全称是(Message Queuing Telemetry Transport),即消息队列遥测传输协议 是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,常用于互联网中&am…...
dd 命令:复制和转换文件
一、dd 命令简介 dd 命令是一个在 Unix 和类 Unix 系统中用于复制文件和转换文件的命令行工具。它的功能非常强大,可以用于各种目的,例如创建镜像文件、备份和恢复数据、复制数据等。 dd 是一个用于读取、转换和写入数据的工具,通常…...
文件系统(磁盘 磁盘文件 inode)
文章目录 磁盘看看物理磁盘磁盘的存储结构 对磁盘的储存进行逻辑抽象inode号文件名 -> inode判断文件在哪个分区 磁盘 电脑中存在非常多的文件,被打开的文件只是少量的。 没有被打开的文件,在磁盘中放着,那么文件是如何存取? …...
ThreeJs创建圆环
ThreeJs除了创建基本的长方体,球形,圆柱等几何体,也可以创建一些特殊的几何体,比如圆环,多边体,这节就来讲怎么用Threejs绘制出圆环。首先依然是要创建出基础的组件,包括场景,相机&a…...
React实现类似Vue的路由监听Hook
React实现类似Vue的路由监听Hook 监听路由变化;React Hook封装,返回回调函数,新旧路由为函数参数; 代码 import { useEffect, useRef } from react; import { useHistory, useLocation } from react-router-dom;/*** 监听路由变…...
Visual Studio打开项目的一些小技巧
Visual Studio(VS)是一款功能强大的集成开发环境,许多刚入门C/C的小白也会使用这款软件进行写代码,然而它的操作并不简单,下面将讲解一下VS打开项目文件的一些小技巧。 目录 🎁创建空项目 ❤️①点击“创建新项目” ❤️②点击“…...
前端页面中使用 ppt 功能,并且可以随意插入关键帧
要在前端页面中实现类似 PowerPoint 的功能,并且能够随意插入和控制关键帧动画,你可以使用 HTML、CSS 和 JavaScript 结合的方式来创建一个互动幻灯片系统。以下是一个详细的实现方案,包括如何插入和控制关键帧动画: 1. 基础 HTM…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
