00. 目录
01. 概述
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。对于初学者,总会对Qt中信号和事件的概念混淆不清。其实,它们并不是一个层面的概念,事件比信号更底层。比如说,我们用鼠标按下界面上的一个按钮,它会发射clicked()单击信号,但是,它怎么知道自己被按下的呢,那就是通过鼠标事件处理的。这里可以看到,鼠标事件比信号更底层。
在Qt中处理事件有多种方法,不过最常用的是重写Qt事件处理函数。这里我们就以鼠标事件和键盘事件为例来进行简单的介绍。
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. 鼠标事件
常用鼠标事件如下:
mouseDoubleClickEvent(QMouseEvent *)
mouseGrabber() : QWidget *
mouseMoveEvent(QMouseEvent *)
mousePressEvent(QMouseEvent *)
mouseReleaseEvent(QMouseEvent *)
3.1 新建Qt Widgets应用,项目名称为6Event,基类更改为QWidget,类名为Widget。
3.2 完成项目创建后,在设计模式向界面上拖入一个Push Button。
3.3 在widget.h文件添加鼠标按下事件处理函数声明
protected:
void mousePressEvent(QMouseEvent *event);
3.4 实现鼠标按下事件函数
#include <QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
//鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{
ui->pushButton->setText(tr("(%1, %2)").arg(event->x()).arg(event->y()));
}
其中x()和y()分别用来返回鼠标光标所在位置的x和y坐标值。这样,当鼠标在界面上点击时,按钮就会显示出当前鼠标的坐标值。
3.5 程序运行结果
04. 键盘事件
常用键盘事件如下:
keyPressEvent(QKeyEvent *)
keyReleaseEvent(QKeyEvent *)
keyboardGrabber() : QWidget *
4.1 在widget.h中添加protected函数声明:
void keyPressEvent(QKeyEvent *event);
4.2 实现键盘按下事件处理函数的定义
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>
#include <QKeyEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
//键盘按下事件
void Widget::keyPressEvent(QKeyEvent *event)
{
int x = ui->pushButton->x();
int y = ui->pushButton->y();
switch (event->key())
{
case Qt::Key_W:
ui->pushButton->move(x, y - 5);
break;
case Qt::Key_S:
ui->pushButton->move(x, y + 5);
break;
case Qt::Key_A:
ui->pushButton->move(x - 5, y);
break;
case Qt::Key_D:
ui->pushButton->move(x + 5, y);
break;
}
}
先获取了按钮的位置,然后使用key()函数获取按下的按键,如果是指定的W、S、A、D等按键时则移动按钮。所有的按键都在Qt::Key枚举类型中进行了定义,可以在帮助文档中进行查看。
05. 附录
源码下载:【Qt】QT鼠标和键盘事件.rar
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容