QT键盘鼠标事件(QT系列7)

学习键盘事件可以通过键盘控制物体或者通过键盘发送相关指令。
学习鼠标事件可以获得鼠标点击位置的坐标,通过坐标系的转换,可以获得任一图像上的坐标。
QT中使用键盘鼠标事件和前文的绘制事件一样也是继承虚函数并添加定义。
文章包括两部分:
1.鼠标事件获得点击位置的坐标
2.键盘事件控制按钮移动

一、鼠标事件获得点击位置的坐标

1.新建工程

基类类型选择QWidget
进入ui文件拖进一个pushbutton

2.修改.h文件
引入头文件QMouseEvent
继承虚函数void mousePressEvent(QMouseEvent *);

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMouseEvent>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

protected:
    void mousePressEvent(QMouseEvent *);
};

#endif // WIDGET_H

2.修改widget.cpp文件

给鼠标事件函数添加定义
定义鼠标事件相关变量为e
按钮上的文字设置为鼠标点击处的xy

void Widget::mousePressEvent(QMouseEvent *e)
{
    ui->pushButton->setText(tr("(%1,%2)").arg(e->x()).arg(e->y()));
}

效果如下:
在这里插入图片描述
二、键盘事件控制按钮移动

1.修改.h文件
引入头文件QKeyEvent
引入虚函数void keyPressEvent(QKeyEvent *);
(注意继承来的虚函数函数名不可更改,否则函数不起作用,除非自己关联信号与槽)

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMouseEvent>
#include <QKeyEvent>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

protected:
    void mousePressEvent(QMouseEvent *);
    void keyPressEvent(QKeyEvent *);
};

#endif // WIDGET_H

2.修改widget.cpp文件
为键盘事件添加定义
1.获得按钮的坐标xy
2.选择键盘事件
3.判断键盘事件并通过不同的事件移动按钮。
(更多键盘事件,可以按crtl键点击Key_W,就可以跳转到Key_W的定义位置,找到更多键盘事件)

void Widget::keyPressEvent(QKeyEvent *e)
{
    int x = ui->pushButton->x();
    int y = ui->pushButton->y();
    switch (e->key())
    {
       case Qt::Key_W : ui->pushButton->move(x, y-10); break;
       case Qt::Key_S : ui->pushButton->move(x, y+10); break;
       case Qt::Key_A : ui->pushButton->move(x-10, y); break;
       case Qt::Key_D : ui->pushButton->move(x+10, y); break;
    }
}

效果为:
W上移 A左移 S下移 D右移

强调:界面的左上角为原点(0,0)X轴向右,Y轴向下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值