当前位置: 首页 > news >正文

【Qt开发】按钮类控件(一)-> QPushButton

目录

1 -> 什么是 PushButton?

2 -> 相关属性

3 -> 代码示例

3.1 -> 带有图标的按钮

3.2 -> 带有快捷键的按钮

4 -> 总结


1 -> 什么是 PushButton?

在 Qt 框架中,QPushButton 是最基础且最常用的按钮控件之一,它是用户界面交互的核心元素。作为 QAbstractButton 类的子类,PushButton 代表了传统的可点击按钮,用于触发应用程序中的特定操作或命令。

QPushButton 继承自 QAbstractButton。这个类是一个抽象类,是其他按钮的父类。

Qt Designer 中也能够看到这里的继承关系。

2 -> 相关属性

QAbstractButton 中,和 QPushButton 相关性较大的属性。

属性说明
text按钮中的文本
icon按钮中的图标
iconSize按钮中图标的尺寸
shortCut按钮对应的快捷键
autoRepeat

按钮是否会重复触发。当鼠标左键按住不放时,

如果设为 true,则会持续产生鼠标点击事件;

如果设为 false,则必须释放鼠标,再次按下鼠标时才能产生点击事件。(相当于游戏手柄上的 “连发” 效果)

autoRepeatDelay重复触发的延时时间。按住按钮多久之后,开始重复触发
autoRepeatInterval重复触发的周期

1. QAbstractButton 作为 QWidget 的子类,当然也继承了 QWidget 的属性。上面介绍的 QWidget 里的各种属性用法,对于 QAbstractButton 同样适用。因此表格中仅仅列出 QAbstractButton 独有的属性。

2. Qt 的 API 设计风格是非常清晰的。此处列出的属性都是可以获取和设置的。例如,使用 text() 获取按钮文本;使用 setText() 设置文本。

事实上,QPushButton 的核心功能都是 QAbstractButton 提供的。自身提供的属性都比较简单。

其中,default 和 audoDefault 影响的是按下 enter 时自动点击哪个按钮的行为;flat 把按钮设置为扁平的样式。

3 -> 代码示例

3.1 -> 带有图标的按钮

1. 创建 rasource.qrc 文件,并导入图片

具体操作参见:【Qt开发】常用控件(四)

2. 在界面上创建一个按钮

3. 修改 widget.cpp,给按钮设置图标

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建图标对象QIcon icon(":/Science.png");// 设置图标ui->pushButton->setIcon(icon);// 设置图标尺寸ui->pushButton->setIconSize(QSize(50, 50));}Widget::~Widget()
{delete ui;
}

4. 执行程序,观察效果

3.2 -> 带有快捷键的按钮

1. 在界面中拖五个按钮

五个按钮的 objectName 分别为 pushButton_target、pushButton_down、pushButton_up、pushButton_left、pushButton_right。

五个按钮的初始位置随意,文本内容均清空。

2. 创建 resource.qrc,并导入 5 张图片

3. 修改 widget.cpp,设置图标资源和快捷键

  • 使用 setShortcut 给按钮设置快捷键。参数是一个 QKeySequence 对象。表示一个按键序列。支持组合键(类似 ctrl + c 这种)。
  • QKeySequence 的构造函数参数,可以直接使用 “ctrl + c” 这样的按键名字符串表示,也可以使用预定义好的常量(形如 Qt::CTRL + Qt::Key_C)表示。
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置按钮图标ui->pushButton_target->setIcon(QIcon(":/image/Science.png"));ui->pushButton_target->setIconSize(QSize(50, 50));ui->pushButton_up->setIcon(QIcon(":/image/up.png"));ui->pushButton_up->setIconSize(QSize(50, 50));ui->pushButton_down->setIcon(QIcon(":/image/down.png"));ui->pushButton_down->setIconSize(QSize(50, 50));ui->pushButton_left->setIcon(QIcon(":/image/left.png"));ui->pushButton_left->setIconSize(QSize(50, 50));ui->pushButton_right->setIcon(QIcon(":/image/right.png"));ui->pushButton_right->setIconSize(QSize(50, 50));// 直接通过按键的名字来设置. 虽然简单, 但是容易写错//    ui->pushButton_up->setShortcut(QKeySequence("ctrl + w"));//    ui->pushButton_down->setShortcut(QKeySequence("s"));//    ui->pushButton_left->setShortcut(QKeySequence("a"));//    ui->pushButton_right->setShortcut(QKeySequence("d"));// 还可以通过按键的枚举来设置按键快捷键// ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));}Widget::~Widget()
{delete ui;
}

4. 修改 widget.cpp,设置四个方向键的 slot 函数

void Widget::on_pushButton_up_clicked()
{// 获取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 设置新的位置ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}void Widget::on_pushButton_down_clicked()
{// 获取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 设置新的位置ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}void Widget::on_pushButton_left_clicked()
{// 获取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 设置新的位置ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}void Widget::on_pushButton_right_clicked()
{// 获取到 target 的位置QRect rect = ui->pushButton_target->geometry();// 基于上次的位置, 设置新的位置ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

5. 运行程序,此时点击按钮,或者使用 wsad 均可以让其移动

通过以上代码,按住快捷键,确实可以进行重复触发。但是鼠标点击却不能。

修改 widget.cpp,在构造函数中开启重复触发。

// 开启鼠标点击的连发功能(键盘的连发默认就是支持的)ui->pushButton_up->setAutoRepeat(true);ui->pushButton_down->setAutoRepeat(true);ui->pushButton_left->setAutoRepeat(true);ui->pushButton_right->setAutoRepeat(true);

此时,按住鼠标时,可以让其连续移动。

4 -> 总结

QPushButton 作为 Qt 框架中最基础的交互控件之一,体现了 Qt 设计哲学的核心原则:功能丰富性、跨平台一致性和用户友好性。它不仅仅是一个简单的点击区域,而是一个完整的交互系统,包含了状态管理、视觉反馈、无障碍访问等综合特性。

理解 PushButton 的完整特性集有助于我们创建出更直观、更易用且符合现代设计标准的应用程序界面。其灵活的自定义能力和丰富的功能选项使其能够适应从传统桌面应用到现代扁平化设计的各种界面需求,是 Qt开发者 工具箱中不可或缺的重要组件。



 

感谢各位大佬支持!!!

互三啦!!!

http://www.dtcms.com/a/357934.html

相关文章:

  • Ethan独立开发新品速递 | 2025-08-30
  • 【读书笔记】《最好的告别》
  • Git 安装与国内加速(配置 SSH Key + 镜像克隆)
  • 系统质量属性
  • 【瑞吉外卖】手机号验证码登录(用QQ邮件发送代替)
  • wpf之附加属性
  • 学习嵌入式第四十一天
  • 【电力电子】MCP602运算放大器测交流电压(120VAC/230VAC),带直流偏置2.5V,比例:133.5:1
  • 【杂谈】-混沌理论能否赋予机器差异化思考能力?
  • 华为 HarmonyOS 代表未来
  • 初学者如何学习项目管理
  • Citrix 零日漏洞自五月起遭积极利用
  • 爱普生L3255打印机故障记录
  • Pregel 与 LangGraph:从分布式图计算到现代 AI 智能体的架构演进与 API 深度解析
  • 多教师语言感知知识蒸馏:提升多语种语音情绪识别的新方法
  • 区块链存证技术:如何让电子证据成为“铁证
  • HarmonyOS应用的多Module设计机制:构建灵活高效的应用程序
  • IPv6过渡技术6VPE
  • Kotlin Android 水印功能实现指南:使用 Watermark 库
  • java agent 字节码增强demo实现,无修改增强服务
  • 从零开始的python学习——注释与运算符
  • Codeforces Round 1033 (Div. 2) and CodeNite 2025 vp补题
  • Oracle 数据库性能调优:从瓶颈诊断到精准优化之道
  • DeepSeek应用技巧-通过MCP打造数据分析助手
  • 现代 Linux 发行版为何忽略Shell脚本的SUID位?
  • 深入 MySQL SELECT 查询
  • windows 谷歌浏览器把英文改成中文
  • 面试 八股文 经典题目 - Mysql部分(一)
  • 数据结构--栈(Stack) 队列(Queue)
  • 从单机到分布式:Python 爬虫架构演进