cpp文件
#include "win.h"
#include "ui_win.h"
Win::Win(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Win)
{
ui->setupUi(this);
}
Win::~Win()
{
delete ui;
}
bool Win::event(QEvent *e)
{
static int i=0; //i 用于计数
qDebug()<<"E捕获到事件:"<<i++; //验证该函数能在事件到达目标对象之前被捕获
if(e->type()==QEvent::KeyPress){ //处理指定事件
qDebug()<<"你按下了键盘";
}
return QWidget::event(e); //把其它事件返回给基类
/*此处应调用父类的 event 函数以对未处理的事件进行处理,若此处不
调用父类的 event,则本例 mousePressEvent 处理函数中的内容将不会
被执行。读者可使此处返回 1 或者 0 进行验证。*/
}
void Win::mousePressEvent(QMouseEvent *e)
{
qDebug()<<"你按下了鼠标";
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
h文件
#ifndef WIN_H
#define WIN_H
#include <QWidget>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Win; }
QT_END_NAMESPACE
class Win : public QWidget
{
Q_OBJECT
public:
Win(QWidget *parent = nullptr);
~Win();
bool event(QEvent* e); //事件处理方式1:重写虚函数QObject::event()
//事件是由顶层基类QObject的event函数来捕获的
void mousePressEvent(QMouseEvent* e); //事件处理方式2:重写基类中的虚函数
//这是Qt中最简单的事件处理方式
private:
Ui::Win *ui;
};
#endif // WIN_H
main文件
#include "win.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Win w;
w.show();
return a.exec();
}
事件处理方式3:重写notify(事件分发)函数
AA.h文件
#ifndef AA_H
#define AA_H
#include <QApplication>
#include <QDebug>
class AA : public QApplication
{
public:
AA(int i,char *p[]):QApplication(i,p){};
/*Qt处理事件的方式之3:”继承 QApplication 并重新实现 notify()函数”。
Qt 调用 QApplication 来发送一个事件,重新实现 notify()函数是在事件过滤器得到所有事件之前获得它们的唯一方法。
事件过滤器使用更为便利。因为可以同时有多个事件过滤器。而 notify()函数只有一个*/
bool notify(QObject *o,QEvent *e); //重写虚函数 notify
};
#endif // AA_H
AA.cpp文件
#include "aa.h"
bool AA::notify(QObject *o, QEvent *e)
{
static int i=0;
qDebug()<<"AA-N"<<i++;
if(o->objectName()=="ma"&&e->type()==QEvent::MouseMove){
qDebug()<<"你移动了鼠标";
}
return QApplication::notify(o,e);
}
win.h
#ifndef WIN_H
#define WIN_H
#include <QWidget>
#include <QDebug>
class Win : public QWidget
{
Q_OBJECT
public:
Win(QWidget *parent = nullptr);
~Win();
bool event(QEvent* e); //重写虚函数 QObject::event()
};
#endif // WIN_H
win.cpp
#include "win.h"
Win::Win(QWidget *parent)
: QWidget(parent)
{
}
Win::~Win()
{
}
bool Win::event(QEvent *e)
{
qDebug()<<"winE事件"; //用于验证该函数是否被执行
return QWidget::event(e);
}
main.cpp
#include "win.h"
#include "aa.h"
#include <QApplication>
int main(int argc, char *argv[])
{
AA a(argc, argv);
Win ma;
ma.setObjectName("ma");
ma.resize(300,200);
ma.show();
return a.exec();
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓