学习键盘事件可以通过键盘控制物体或者通过键盘发送相关指令。
学习鼠标事件可以获得鼠标点击位置的坐标,通过坐标系的转换,可以获得任一图像上的坐标。
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轴向下。