Qt中事件被封装成对象,所有事件均继承抽象类QEvent
键盘事件QKeyEvent鼠标事件QMouseEvent定时器事件QTimerEvent
事件定义:事件是对各种应用程序需要知道的由应用程序内部或外部产生的事情或者动作的统称。
谁来产生事件:
1.由窗口系统产生,如鼠标键盘
2.由Qt应用程序自身产生,如定时器事件
谁来接受处理事件:
QObject的职责之一就是处理事件
QObject::event()函数是所有对象事件的入口,把事件推入特定的事件处理函数。
负责事件分发:notify()来负责。
//event继承QObject类且是虚函数
virtual bool
event(QEvent *e)
virtual bool
eventFilter(QObject *watched, QEvent *event)
bool类型返回值真假10
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
bool event(QEvent* e);
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.c文件
#include "widget.h"
#include "ui_widget.h"
#include<QEvent>
#include<QDebug>
#include<QMouseEvent>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
//重写QEvent函数,改变鼠标按键的默认操作
bool Widget::event(QEvent* e)
{
//判断事件类型
if(e->type() == QEvent::MouseButtonPress)
{
qDebug() <<"mouse press";
QMouseEvent* mouseEvent = (QMouseEvent*)e; //强制类型转换
//判断鼠标的哪个按键按下
if(mouseEvent->button() == Qt::LeftButton)
{
qDebug() <<"mouse left press";
}
else if(mouseEvent->button() == Qt::RightButton)
{
qDebug() <<"mouse right press";
}
}
return true;
}
上述代码实现点击鼠标显示mouse press点击鼠标左键显示mouse left press,点击鼠标右键显示mouse rught press