【Qt】常用控件QPushButton

 常用控件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);

    //设置图标
    //target
    ui->pushButton_target->setIcon(QIcon(":/image/dogHead.png"));
    ui->pushButton_target->setIconSize(QSize(100, 100));
    //up
    ui->pushButton_up->setIcon(QIcon(":/image/up.png"));
    ui->pushButton_up->setIconSize(QSize(50, 50));
    //down
    ui->pushButton_down->setIcon(QIcon(":/image/down.png"));
    ui->pushButton_down->setIconSize(QSize(50, 50));
    //left
    ui->pushButton_left->setIcon(QIcon(":/image/left.png"));
    ui->pushButton_left->setIconSize(QSize(50, 50));
    //right
    ui->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());
}

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值