鼠标和键盘事件
这篇笔记中,我们来了解一下如何在Qt中捕捉鼠标和键盘事件。
QWidget中的事件回调函数
我们查看QWidget的源码,会发现其中定义了一些鼠标、键盘事件的虚函数。我们要想捕捉这些事件,只需要继承QWidget,并实现这些虚函数即可。

捕捉鼠标和键盘事件
这里我们简单介绍一些鼠标和键盘事件的捕捉和使用,下面例子代码中定义了一个类继承QWidget。
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QEvent>
#include <QMouseEvent>
#include <QKeyEvent>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
//所有事件
bool event(QEvent *ev);
//鼠标事件
void mousePressEvent(QMouseEvent *ev);
void mouseReleaseEvent(QMouseEvent *ev);
void mouseMoveEvent(QMouseEvent *ev);
//键盘事件
void keyPressEvent(QKeyEvent *ev);
void keyReleaseEvent(QKeyEvent *ev);
};
#endif // MYWIDGET_H
mywidget.cpp
#include <QDebug>
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
this->setMouseTracking(true);
}
bool MyWidget::event(QEvent *ev)
{
ev->accept();
return QWidget::event(ev);
}
void MyWidget::mousePressEvent(QMouseEvent *ev)
{
if(ev->button() == Qt::LeftButton)
{
//按下鼠标左键的同时按下Shift
if(ev->modifiers() == Qt::ShiftModifier)
{
qDebug() << "Shift+Left Click";
}
//只按下鼠标左键
else
{
qDebug() << "Left Click";
}
}
}
void MyWidget::mouseReleaseEvent(QMouseEvent *ev)
{
qDebug() << "Mouse Release";
}
void MyWidget::mouseMoveEvent(QMouseEvent *ev)
{
QPoint pos = ev->pos();
qDebug() << pos;
}
void MyWidget::keyPressEvent(QKeyEvent *ev)
{
int key = ev->key();
if(ev->modifiers() == Qt::ShiftModifier)
{
qDebug() << "Shift+按键按下" << key;
}
else
{
qDebug() << "按键按下" << key;
}
}
void MyWidget::keyReleaseEvent(QKeyEvent *ev)
{
int key = ev->key();
qDebug() << "按键弹起" << key;
}
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。