
点击上方蓝字关注我们


事件(event)是由窗口系统或者Qt自身产生的,用于响应应用程序发生的各类事情。比如:当用户按下键盘或者鼠标上的按键时,就可以产生一个键盘或者鼠标事件;当某个窗口第一次显示的时候,会产生一个绘制事件,用来告诉窗口需要重新绘制它本身,从而使得该窗口可见。大多数事件是作为用户动作的响应而产生的,但是也有一些例外。比如:像定时器事件,则是由系统独立产生的。在QT中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent。事件和信号之间的区别:事件比信号更加底层,如果一个信号连接多个槽,信号的传递没有顺序,而事件的传递是有顺序的。
抽象类QEvent常用的函数如下:
void accept() //设置事件对象接受信号
void ignore() //清除事件,表示事件对象不接受信号
|
10.1 窗口事件10.1.1 介绍常用的窗口事件接口 QWidget类中定义的窗口相关事件如下:
1. 窗口移动事件
[virtual protected] void QWidget::moveEvent(QMoveEvent *event)
|
当窗口移动时会产生moveEvent事件,在子类中重载moveEvent函数,可以实时获取窗口的位置。
示例:
//重载窗口移动事件
void Widget::moveEvent(QMoveEvent *event)
{
qDebug("当前窗口坐标位置信息 x:%d y:%d",event->pos().x(),event->pos().y());
}
|
2. 窗口大小变化事件
[virtual protected] void QWidget::resizeEvent(QResizeEvent *event)
|
当窗口的大小发生改变时会产生resizeEvent事件,在子类中重载resizeEvent函数,可以实时获取窗口的大小。
示例:
//重载窗口大小变化事件
void Widget::resizeEvent(QResizeEvent *event)
{
qDebug("窗口当前尺寸大小信息 宽:%d 高:%d",event->size().width(),event->size().height());
}
|
3. 窗口显示事件
[virtual protected] void QWidget::showEvent(QShowEvent *event)
|
窗口第一次显示时会产生showEvent事件。例如:执行了show()函数
4. 窗口重绘事件
[virtual protected] void QWidget::paintEvent(QPaintEvent *event)
|
窗口第一次显示、大小位置发生改变、从隐藏状态变为显示状态都会产生paintEvent重绘事件。
5. 窗口隐藏事件
[virtual protected] void QWidget::hideEvent(QHideEvent *event)
|
当窗口从可见状态变为不可见状态时,会产生hideEvent事件。例如:调用setVisible(false)、hide()函数或者最小化窗口都可以使窗口处于不可见状态。
6. 光标离开事件
[virtual protected] void QWidget::leaveEvent(QEvent *event) //光标离开事件
[virtual protected] void QWidget::enterEvent(QEvent *event)// 光标进入事件
|
当鼠标光标从窗口上离开时会产生leaveEvent事件。当鼠标光标进入窗口范围时会产生enterEvent事件。
7. 窗口关闭事件
[virtual protected] void QWidget::closeEvent(QCloseEvent *event)
|
当关闭窗口前会产生closeEvent事件,例如:调用close函数或者点击窗口右上角的关闭按钮。在子类中重载closeEvent函数,可以在窗口关闭之间处理一些其他事情。例如:现在正在编辑文件,如果关闭窗口,可以弹出个对话框,提示用户是否要保存文件。
示例:
//窗口关闭事件
void MainWindow::closeEvent(QCloseEvent *event)
{
int ret = QMessageBox::question(this, tr("窗口关闭事件"),
tr("是否需要关闭窗口?"),
QMessageBox::Yes | QMessageBox::No);
if(ret==QMessageBox::Yes)
{
event->accept(); //接受事件
}
else
{
event->ignore(); //清除事件
}
}
|
10.1.2 处理窗口事件实例 本实例主要演示窗口事件的接收和处理方式。
当用户拖动窗口移动或者改变窗口尺寸时,程序将实时打印当前窗口的位置和尺寸信息;点击窗口关闭按钮可以选择是否关闭窗口。(配套程序编号CH10-1)

图10-1-1 截取窗口事件
下面说明实例具体实现步骤:
1. “mainwindow.h”文件中重定义了QWidget类相关的窗口事件方法。当窗口发生变化时,就会响应相应的函数,具体代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMoveEvent>
#include <QresizeEvent>
#include <QDebug>
#include <QMessageBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void moveEvent(QMoveEvent *event); //窗口移动事件
void resizeEvent(QResizeEvent *event); //窗口大小变化事件
void showEvent(QShowEvent *event); //窗口显示事件
void paintEvent(QPaintEvent *event); //重绘事件
void leaveEvent(QEvent *event); //光标离开事件
void enterEvent(QEvent *event); //光标进入事件
void closeEvent(QCloseEvent *event); //窗口关闭事件
void hideEvent(QHideEvent *event); //窗口隐藏事件
};
#endif // MAINWINDOW_H
|
2. “mainwindow.cpp”文件中实现了对应的函数。比如:窗口移动事件函数,用于实时获取当前窗口的具体坐标。具体代码如下:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("窗口事件"));
resize(300,200);
}
MainWindow::~MainWindow()
{
}
//重载窗口移动事件
void MainWindow::moveEvent(QMoveEvent *event)
{
qDebug("当前窗口坐标位置信息:(x=%d,y=%d)",event->pos().x(),event->pos().y());
}
//窗口大小变化事件
void MainWindow::resizeEvent(QResizeEvent *event)
{
qDebug("窗口当前尺寸大小信息:(w=%d,h=%d",event->size().width(),event->size().height());
}
//窗口显示事件
void MainWindow::showEvent(QShowEvent *event)
{
qDebug()<<"窗口显示事件";
}
//重绘事件
void MainWindow::paintEvent(QPaintEvent *event)
{
qDebug()<<"窗口重绘事件";
}
//鼠标光标离开事件
void MainWindow::leaveEvent(QEvent *event)
{
qDebug()<<"鼠标光标离开窗口范围";
}
//窗口关闭事件
void MainWindow::closeEvent(QCloseEvent *event)
{
int ret = QMessageBox::question(this, tr("窗口关闭事件"),
tr("是否需要关闭窗口?"),
QMessageBox::Yes | QMessageBox::No);
if(ret==QMessageBox::Yes)
{
event->accept(); //接受事件
}
else
{
event->ignore(); //清除事件
}
}
//窗口隐藏事件
void MainWindow::hideEvent(QHideEvent *event)
{
qDebug()<<"窗口隐藏";
}
//光标进入事件
void MainWindow::enterEvent(QEvent *event)
{
qDebug()<<"鼠标光标进入窗口范围";
}
|
10.2 鼠标事件 鼠标事件一般包括:移动事件、单击事件、双击事件、鼠标按键按下和松开事件。
10.2.1 介绍鼠标事件接口 QWidget类中定义的鼠标相关事件如下:
1. 鼠标按压事件
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)
|
当鼠标在窗口范围内按下时,将会产生mousePressEvent事件;如果需要接收鼠标按下事件,可以在子类中重载mousePressEvent函数。
2. 鼠标双击事件
virtual void mouseDoubleClickEvent(QMouseEvent *event)
|
当鼠标在窗口范围内双击,将会产生mouseDoubleClickEvent事件;如果需要接收鼠标双击事件,可以在子类中重载mouseDoubleClickEvent函数。
3. 鼠标释放事件
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)
|
当鼠标在窗口范围内按下后释放,将会产生mouseReleaseEvent事件;如果需要接收鼠标释放事件,可以在子类中重载mouseReleaseEvent函数。
4. 鼠标移动事件
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)
|
当鼠标移动时将会产生mouseMoveEvent事件;如果需要实时获取鼠标的位置信息,可以在子类中重载mouseMoveEvent函数。
注意:如果需要在不按下鼠标按键的情况下获取鼠标位置,需要使用setMouseTracking函数设置追踪鼠标。如果不设置鼠标最终,只有当鼠标有按键按下时,才能检测其按下的位置。默认情况下不支持鼠标追踪,而很多时候都需要实时得知鼠标的位置。例如:获取屏幕颜色值、绘图程序等。
设置窗口追踪鼠标示例:
this->setMouseTracking(true);
|
10.2.2 QMouseEvent类介绍 10.2.1节介绍了4个处理鼠标事件的函数,发现每个函数的传入的形参都是QMouseEvent类。QMouseEvent类保存了鼠标事件产生的详细信息。例如:鼠标按下的是左键还是右键,鼠标光标当前的坐标位置信息等。
以下介绍QMouseEvent类常用的成员函数:
1. 获取鼠标相对于接收事件窗体的坐标位置
QPoint QMouseEvent::pos() const //获取QPoint,包含了x和y坐标
int QMouseEvent::x() const //获取x坐标
int QMouseEvent::y() const //获取y坐标
|
示例:
void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
qDebug("pos: x=%d,y=%d",e->pos().x(),e->pos().y());
qDebug("x=%d,y=%d",e->x(),e->y());
}
|
2. 获取鼠标相对于窗体系统(屏幕)的坐标位置
QPoint QMouseEvent::globalPos() const //获取xy坐标
int QMouseEvent::globalY() const //获取x坐标
int QMouseEvent::globalX() const //获取y坐标
|
示例:
void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
qDebug("x=%d,y=%d",e->globalX(),e->globalY()); //获取打印鼠标相对于窗口系统的坐标
}
|
3. 获取鼠标按键属性
Qt::MouseButton QMouseEvent::button() const
|
Qt::MouseButton枚举如下:
Qt::RightButton
| 鼠标右键
| Qt::LeftButton
| 鼠标左键
| Qt::MidButton
| 鼠标中键
|
示例:
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::LeftButton)
{
//左键
}
else if(e->button()==Qt::RightButton)
{
//右键
}
else if(e->button()==Qt::MidButton)
{
//中键
}
}
|
10.2.3 处理鼠标事件实例 下面例子介绍了处理鼠标事件的方法。当用户在窗口范围内移动鼠标时,窗口的右下角状态栏将会实时显示当前鼠标所在的位置信息;当用户按下鼠标按键时,窗口左下角状态栏将会显示用户按下的键属性(包括:中键、左键、右键),鼠标松开时也会显示当前鼠标松开的位置信息。
运行效果图如下:(配套程序编号CH10-2)


图10-2-1 鼠标事件运行实例
1. “mouseevent.h”文件代码
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H
#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>
#include <QDebug>
#include <QHBoxLayout>
class MouseEvent : public QMainWindow
{
Q_OBJECT
public:
MouseEvent(QWidget *parent = 0);
~MouseEvent();
protected:
/*重载各类鼠标事件*/
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
private:
QLabel *MousePosLabel;
};
#endif // MOUSEEVENT_H
|
2. “mouseevent.cpp”文件代码
#include "mouseevent.h"
MouseEvent::MouseEvent(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("鼠标事件"));
MousePosLabel = new QLabel;
MousePosLabel->setFixedWidth(110);
statusBar()->addPermanentWidget(MousePosLabel);
this->setMouseTracking(true); //追踪鼠标
resize(400,200);
}
MouseEvent::~MouseEvent()
{
}
//鼠标按压事件
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
QString str=QString("(%1,%2)").arg(e->x()).arg(e->y());
if(e->button()==Qt::LeftButton)
{
statusBar()->showMessage(tr("左键:")+str);
}
else if(e->button()==Qt::RightButton)
{
statusBar()->showMessage(tr("右键:")+str);
}
else if(e->button()==Qt::MidButton)
{
statusBar()->showMessage(tr("中键:")+str);
}
}
//鼠标移动事件
void MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
QString str=QString("光标位置:(%1,%2)").arg(e->x()).arg(e->y());
MousePosLabel->setText(str);
}
void MouseEvent::mouseReleaseEvent(QMouseEvent *e)
{
QString str=QString("释放位置:(%1,%2)").arg(e->x()).arg(e->y());
statusBar()->showMessage(str,5000);
}
//鼠标双击事件
void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e)
{
//处理鼠标双击事件
}
|
10.2.4 鼠标滚轮事件处理 处理鼠标滚轮事件需要继承wheelEvent函数,QWidget类中的鼠标滚轮事件如下:
void wheelEvent(QWheelEvent *event);
|
(1) mainWindow.h文件
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void wheelEvent(QWheelEvent *event); //重新实现滚轮事件
};
|
(2) mainWindow.cpp文件
//鼠标滚轮事件
void MainWindow::wheelEvent(QWheelEvent *event)
{
qDebug()<<"滑动的距离:"<<event->delta(); //获取鼠标滚轮滚动的距离
if(event->delta()>0)
{
//向前滑动
}
else
{
//向后滑动
}
event->accept(); //接收事件
}
|
鼠标滚轮事件结合键盘事件可以实现textEdit编辑器的字体放大和缩小。
10.3 键盘事件 键盘事件主要用于获取键盘上按键的状态,区分哪些按键被按下或者释放。比如:在游戏程序或者图像处理程序中,有时需要通过键盘控制某个对象的移动;在输入法程序中需要得到按键值进行输入,这些情况下就可以通过键盘事件进行处理。
10.3.1 介绍键盘事件接口 键盘事件主要就两个函数,一个用于接收按下事件,一个用于接收释放事件。
1. 键盘按下事件
[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event)
|
当接收事件的窗口获取到键盘输入焦点时,按下键盘,就会产生keyPressEvent事件。如果需要接收按键事件,可以在子类中重载keyPressEvent函数。
widget窗口获取焦点的方式可以通过setFocusPolicy函数进行设置:
Qt::FocusPolicy focusPolicy() const
void setFocusPolicy(Qt::FocusPolicy policy)
|
Qt::FocusPolicy枚举值如下表所示:
Qt::TabFocus
| 通过Tab键获得焦点
| Qt::ClickFocus
| 通过被单击获得焦点
| Qt::StrongFocus
| 可通过上面两种方式获得焦点
| Qt::NoFocus
| 不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点
|
2. 键盘释放事件
[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event)
|
当窗口获取焦点后,按下按键再释放就会产生keyReleaseEvent事件。如果需要接收按键释放事件,可以在子类中重载keyReleaseEvent函数。
10.3.2 QKeyEvent类介绍 QKeyEvent类用于描述键盘按键所产生的键盘事件。当一个窗口具有输入焦点时,通过按下或者释放键盘的按键将会产生的键盘事件,可以传送给具有输入焦点的窗口进行处理。
键盘事件包含了一些指定的接收标志用于指出事件接受者是否对该事件进行处理,如果窗口不处理键盘的(按下/释放)事件,可以通过调用ignore()函数忽略事件。键盘事件具有传递性,会一层一层的传递,直到某窗口调用accept()函数接受事件,或者过滤直至该事件被销毁。如果你的窗口要处理该事件,可以通过调用accept()函数接受事件。下面将介绍成员函数。
1. 获取按下的键值
int QKeyEvent::key() const
|
返回的键值由Qt::Key枚举描述,下面表格中列出了常用的键盘值,全部键盘值定义可以查看QT的帮助手册。
键值
| 功能描述
|
| 键值
| 功能描述
| Qt::Key_Up
| 方向键:上
|
| Qt::Key_Down
| 方向键:下
| Qt::Key_Left
| 方向键:左
|
| Qt::Key_Right
| 方向键:右
| Qt::Key_PageUp
| PageUp暂停键
|
| Qt::Key_Home
| Home键
| Qt::Key_Delete
| Delete删除键
|
| Qt::Key_Tab
| Tab键
| Qt::Key_Escape
| ESC键
|
| Qt::Key_Return
| Enter键
| Qt::Key_Space
| 空格键
|
| Qt::Key_Control
| ctrl键
| Qt::Key_Alt
| Alt键
|
| Qt::Key_Shift
| Shift键
| Qt::Key_CapsLock
| 大小写锁定键
|
| Qt::Key_NumLock
| 小键盘锁定键
| Qt::Key_Backspace
| Backspace退格键
|
| Qt::Key_0 - Qt::Key_9
| 数字键1-9
| Qt::Key_A - Qt::Key_Z
| 字母键A-Z
|
| Qt::Key_F1 - Qt::Key_F35
| F键F1-F35
|
示例:
void KeyEvent::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Up:
qDebug("方向键:上");
break;
case Qt::Key_Down:
qDebug("方向键:下");
break;
}
}
|
2. 判断修饰键是否被按下
Qt::KeyboardModifiers QKeyEvent::modifiers() const
|
常用的修饰键:shift、Ctrl、Alt等。
Qt::KeyboardModifiers枚举定义的修饰键如下:
枚举值定义
| 键值说明
| Qt::NoModifier
| 没有修饰符按键按下
| Qt::ShiftModifier
| shif键按下
| Qt::ControlModifier
| Ctrl键按下
| Qt::AltModifier
| Alt键按下
| Qt::MetaModifier
| Meta键按下
| Qt::KeypadModifier
| 小键盘键按下
| Qt::GroupSwitchModifier
| Mode_switch被按下
|
示例:
void KeyEvent::keyPressEvent(QKeyEvent *event)
{
switch(event->modifiers())
{
case Qt::NoModifier:
qDebug("无按键修饰键");
break;
case Qt::ShiftModifier:
qDebug("修饰键:shift键");
break;
case Qt::ControlModifier:
qDebug("修饰键:Ctrl键");
break;
case Qt::AltModifier :
qDebug("修饰键:Alt键");
break;
}
}
|
3. 检测按键是否是重复按下
bool QKeyEvent::isAutoRepeat() const
|
如果按键是第一次按下将返回false,如果按着不松开,后面将判断按键是重复按下。重复按下将返回true。
10.3.3 处理键盘事件实例 下面实例主要介绍了键盘事件的判断与处理方法。用于可以通过键盘上的4个方向键移动窗口内的一张图片(类似于拼图游戏效果),图片了使用了标签控件进行加载显示。实例运行效果图如下:(配置程序编号CH10-4)


图10-3-1 键盘事件处理实例
1. “mainwindow.h”文件代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QKeyEvent>
#include <QDebug>
#include <QLabel>
#include <QPixmap>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
int image_width;
int image_height;
protected:
void keyPressEvent(QKeyEvent *event);
QLabel *label;
};
#endif // MAINWINDOW_H
|
在mainwindow.h文件中主要是重载了keyPressEvent事件。
2. “mainwindow.cpp”文件代码
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
setWindowTitle(tr("键盘事件实例"));
resize(400,200);
label=new QLabel(this);
QPixmap pixmap(":/image/1.png");
label->setPixmap(pixmap);
image_width=pixmap.width();
image_height=pixmap.height();
label->setGeometry(0,0,image_width,image_height);
}
MainWindow::~MainWindow()
{
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Up: //方向键:上
if(label->y()>0)
label->move(label->x(),label->y()-10); //移动位置
break;
case Qt::Key_Down://方向键:下
if(label->y()+image_height<=this->height())
label->move(label->x(),label->y()+10);
break;
case Qt::Key_Left: //方向键:左
if(label->x()>0)
label->move(label->x()-10,label->y());
break;
case Qt::Key_Right://方向键:右
if(label->x()+image_width<this->width())
label->move(label->x()+10,label->y());
break;
}
}
|
mainwindow.cpp文件中主要有两个函数:
(1) MainWindow构造函数中创建了标签控件,并指定了标签控件显示图片,加载的图片使用了资源文件进行保存(资源文件创建方法参考前面章节)。
(2) keyPressEvent函数中编写了主要的功能代码。当按下键盘上的方向键时,根据按下的键值进行判断,调用move函数移动标签控件在窗口中显示的位置。
10.4 事件过滤器 如果开发者希望处理特定的事件,QT提供的事件过滤器允许拦截分发给某个对象的事情。给一个QObject对象安装事件过滤器,使得一个QObject对象可以监视另一个QObject对象中的事件,可以在事件到达该对象之前将事件捕获,从而起到监视该对象的作用。
10.4.1 介绍事件过滤器接口 作为安装事件过滤器的类,必须是QObject类的子类;需要通过重写QObject类的eventFilter函数来接收事件以作选择性处理。eventFilter函数原型如下:
[virtual] bool QObject::eventFilter(QObject *watched, QEvent *event)
|
eventFilter函数参数中watched对象是原本接收事件的对象,我们安装了事件过滤器后,事件就会先发给过滤器的对象,过滤器对象如果不处理某个事件,这个事件才会进一步向前传递,最终才有可能到达watched对象。
重写了eventFilter函数后,还需要将事件过滤器安装到需要被过滤的对象上,这样eventFilter函数才能响应事件。完成安装事件过滤器的函数接口为installEventFilter,其原型如下:
void QObject::installEventFilter(QObject *filterObj)
|
参数filterObj是监视事件的对象,此对象可以通过eventFilter函数接收事件;如果某个事件需要被过滤(得到想要的事件),就在eventFilter函数中返回true,如果不需要过滤(没有想要的事件)则返回false。
如果需要解除已安装的事件过滤器,可以调用QObject类的removeEventFilter函数。其原型如下:
void QObject::removeEventFilter(QObject *obj)
|
10.4.2 事件过滤器使用示例 下面编写一个小程序,主要用于描述事件过滤器的安装和使用方式。程序实现的效果是过滤按钮控件上的鼠标事件。(完整配套代码编号CH10-3)
运行效果图如下:


图10-4-1 事件过滤器运行示例图
1. Widget.h文件代码。
Widget.h文件中重载了QObject 类的eventFilter函数。
#ifndef WIDGET_H
#define WIDGET_H
#include <QPushButton>
#include <QWidget>
#include <QDebug>
#include <QEvent>
#include <QMouseEvent>
class Widget : public QWidget
{
Q_OBJECT
protected:
//重载eventFilter函数
bool eventFilter(QObject *watched, QEvent *event);
public:
Widget(QWidget *parent = 0);
QPushButton *button;
~Widget();
};
#endif // WIDGET_H
|
2. widget.cpp文件代码
widget.cpp文件中给按钮安装的事件过滤器,并在eventFilter函数内,对事件进行的区分处理。
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
resize(400,200);
button=new QPushButton(this); //创建QPushButton对象
button->installEventFilter(this); //安装事件过滤器
button->setText("PushButton");
button->setGeometry(this->width()/2-80,this->height()/2-40,80,40);
}
Widget::~Widget()
{
}
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
//区分产生事件的对象
if(watched==button)
{
//区分事件的类型
if(event->type()==QEvent::MouseButtonPress)
{
//强制转为对应的类型
QMouseEvent *MouseEvrnt=(QMouseEvent *)event;
//区分具体的键值
if(MouseEvrnt->button()==Qt::LeftButton)
{
//处理事件
qDebug()<<"鼠标左键被按下";
//return true; 表示截取事件,不传递下去。这样watched对象就不会响应该事件
}
else if(MouseEvrnt->button()==Qt::RightButton)
{
//处理事件
qDebug()<<"鼠标右键被按下";
//return true; 表示截取事件,不传递下去。这样watched对象就不会响应该事件
}
}
}
return QWidget::eventFilter(watched,event); //将不处理的事件传递给QWidget父窗口
}
|
 技术合作与咨询
QQ:1126626497 关注我长按二维码可识别微信号:xl1126626497

---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:DS小龙哥 嵌入式技术资讯,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|