当前位置: 首页 > 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.xdnf.cn/news/1397791.html

相关文章:

  • 互联网大厂面试:大模型应用开发岗位核心技术点解析
  • LeetCode54螺旋矩阵算法详解
  • MySQL數據庫開發教學(四) 後端與數據庫的交互
  • 【Docker】Docker初识
  • 医院排班|医护人员排班系统|基于springboot医护人员排班系统设计与实现(源码+数据库+文档)
  • flink中 Lookup Join和Interval Join和Regular Join使用场景与对比
  • HTML 核心元素实战:超链接、iframe 框架与 form 表单全面解析
  • Java类加载与JVM详解:从基础到双亲委托机制
  • 基于 Kubernetes 的 Ollama DeepSeek-R1 模型部署
  • Oracle 数据库性能调优:从瓶颈诊断到精准优化之道
  • Zynq开发实践(FPGA之输入、输出整合)
  • K8s卷机制:数据持久化与共享
  • 【机器学习基础】机器学习中的容量、欠拟合与过拟合:理论基础与实践指南
  • 【高级机器学习】 4. 假设复杂度与泛化理论详解
  • HiFi-GAN模型代码分析
  • 理解JVM
  • web渗透ASP.NET(Webform)反序列化漏洞
  • psql介绍(PostgreSQL命令行工具)(pgAdmin内置、DBeaver、Azure Data Studio)数据库命令行工具
  • 【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)
  • sql简单练习——随笔记
  • 打工人日报#20250830
  • 鸿蒙ArkUI 基础篇-12-List/ListItem-界面布局案例歌曲列表
  • 音视频学习(六十二):H264中的SEI
  • [字幕处理]一种使用AI翻译mkv视频字幕操作流程 飞牛
  • 【Blender】二次元人物制作【一】:二次元角色头部建模
  • Java的Optional实现优雅判空新体验【最佳实践】
  • 【已解决】could not read Username for ‘https://x.x.x‘: No such device or address
  • 算法(③二叉树)
  • leetcode算法刷题的第二十二天
  • DVWA靶场通关笔记-文件包含(Impossible级别)