【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开发者 工具箱中不可或缺的重要组件。
感谢各位大佬支持!!!
互三啦!!!