常用控件QPushButton
QWidget中涉及的各种属性/函数/使用方法,对Qt中的各种控件都是有效的。
QPushButton继承自QAbstractButton。这个类是抽象类,是其他按钮的父类。
QAbstractButton中和QPushButton相关性比较大的属性。
属性 | 说明 |
---|---|
text | 按钮中的⽂本 |
icon | 按钮中的图标 |
iconSize | 按钮中图标的尺⼨ |
shortCut | 按钮对应的快捷键 |
autoRepeat | 按钮是否会重复触发. 当⿏标左键按住不放时, 如果设为 true, 则会持续产⽣⿏标点击事件; 如果设为 false, 则必须释放⿏标, 再次按下⿏标时才能产⽣点击事件. (相当于游戏⼿柄上的 "连发" 效果) |
autoRepeatDelay | 重复触发的延时时间. 按住按钮多久之后, 开始重复触发. |
autoRepeatInterval | 重复触发的周期. |
例子:给按钮加图标
1.首先准备一张图片(可以在阿里巴巴矢量图标库免费查找)
2.将图片导入Qt中,使用qrc管理。(后续在编写代码的时候,如果需要使用图片等外部资源,都会优先考虑qrc管理,除非这个资源太大)
在Qt Creator中,创建好qrc文件之后,切换到代码编辑框,编写代码,如果想要再次查看qrc编辑器,点击之后可能是无效的。此时,可以找到下拉菜单进行点击即可。
3.编写代码
可以将尺寸变大
例子:给按钮添加快捷键
引入快捷键操作,通过四个按钮控制target按钮的移动。
(1)创建qrc文件,导入资源
此处按钮直接通过图片来表示。
将图片导入项目的时候,由于图片过多,如果不想再放在项目根目录下面,就可以创建一个新目录(image目录),将图片放在新目录里面,此时意味着后续访问这些图片,就需要再在路径上带上image这一级目录名字。
(2)创建ui文件,创建界面
通过点阵,可以将按钮进行对齐,后序的学习过程中还会介绍更好的方式来完成上述“”对齐
这是Qt程序运行过程中,对象树的模样。可以很直观的看到对象结构,以及每个对象的objectName
(3)编写构造函数,完成初始化操作
(4)实现方向键的槽函数
(5)设置快捷键(关键要点)------需要在Widget的构造函数中完成,程序一旦启动,快捷键就是有效果的。
参数是一个QKeySequence对象,按下的快捷键不一定是单个按键,也可能是组合键。
这种方式是直接通过按键的名字来设置,虽然简单,但是容易写错。
可以通过按键的枚举的方式来设置
加上ctrl键
(6)连发功能
键盘快捷键默认就是可以连发的,但是鼠标点击按钮则不行。
代码实现:
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置图标//targetui->pushButton_target->setIcon(QIcon(":/image/dogHead.png"));ui->pushButton_target->setIconSize(QSize(100, 100));//upui->pushButton_up->setIcon(QIcon(":/image/up.png"));ui->pushButton_up->setIconSize(QSize(50, 50));//downui->pushButton_down->setIcon(QIcon(":/image/down.png"));ui->pushButton_down->setIconSize(QSize(50, 50));//leftui->pushButton_left->setIcon(QIcon(":/image/left.png"));ui->pushButton_left->setIconSize(QSize(50, 50));//rightui->pushButton_right->setIcon(QIcon(":/image/right.png"));ui->pushButton_right->setIconSize(QSize(50, 50));//设置快捷键//直接通过按键的名字来设置
// ui->pushButton_up->setShortcut(QKeySequence("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::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));//加上ctrl键
// ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));
// ui->pushButton_down->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S));
// ui->pushButton_left->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));
// ui->pushButton_right->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D));//开启鼠标点击连发功能ui->pushButton_up->setAutoRepeat(true);ui->pushButton_down->setAutoRepeat(true);ui->pushButton_left->setAutoRepeat(true);ui->pushButton_right->setAutoRepeat(true);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_up_clicked()
{//获取terget的位置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()
{//获取terget的位置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()
{//获取terget的位置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()
{//获取terget的位置QRect rect = ui->pushButton_target->geometry();//基于上次位置,设置新位置ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}