一起看代码来玩玩QT之06EventFilter (事件过滤)
来源:互联网 发布:淘宝网店改名字 编辑:程序博客网 时间:2024/05/23 23:45
filter : 过滤
notify: 通知
MyApplication.h
#ifndef MYAPPLICATION_H#define MYAPPLICATION_H#include <QApplication>class MyApplication : public QApplication{ Q_OBJECTpublic: MyApplication(int argc, char*argv[]):QApplication(argc, argv) {} bool notify(QObject *, QEvent *);signals:public slots:};#endif // MYAPPLICATION_H
#include "MyApplication.h"#include <QEvent>#include <QDebug>bool MyApplication::notify(QObject *o, QEvent *e){ if(this->topLevelWidgets().count()>0) { QWidget* mainWnd = this->topLevelWidgets().at(0); if(o==(QObject*)mainWnd && e->type() == QEvent::MouseButtonPress) { // do ... qDebug() << "mainwnd is clicked"; } } return QApplication::notify(o, e);}
#ifndef MYWIDGET_H#define MYWIDGET_H#include <QWidget>#include <QPushButton>class MyWidget : public QWidget{ Q_OBJECTpublic: explicit MyWidget(QWidget *parent = 0); QPushButton* _button; bool eventFilter(QObject *, QEvent *); bool event(QEvent *);signals:public slots:};#endif // MYWIDGET_H
#include "MyWidget.h"#include <QPushButton>#include <QEvent>#include "MyApplication.h"#include <QDebug>#include <QApplication>MyWidget::MyWidget(QWidget *parent) : QWidget(parent){ QPushButton* button; button = new QPushButton("This button", this); connect(button, SIGNAL(clicked()), this, SLOT(close())); _button = button; /* button给自己安装了一个消息过滤器,那么经过button的消息,都先要调用它的过滤器的eventFilter函数 */ button->installEventFilter(this);}bool MyWidget::eventFilter(QObject *o, QEvent *e){#if 0 if(o == (QObject*)_button &&( e->type() == QEvent::MouseButtonRelease || e->type() == QEvent::MouseButtonDblClick || e->type() == QEvent::MouseButtonPress)) { return true; }#endif return QWidget::eventFilter(o, e);}bool MyWidget::event(QEvent *e){ if(e->type() == QEvent::User) { qDebug() << "User event is comming"; } return QWidget::event(e);}int main(int argc, char* argv[]){ MyApplication app(argc, argv); MyWidget w; w.show(); // 发送一个Event给MyWidget qDebug() << "begin send"; app.postEvent(&w, new QEvent(QEvent::User)); qDebug() << "end send"; // app.sendEvent(&w, ) return app.exec();}
0 0
- 一起看代码来玩玩QT之06EventFilter (事件过滤)
- 一起看代码来玩玩QT之06Event
- 一起看代码来玩玩QT之01Hello world
- 一起看代码来玩玩QT之02LineEdit
- 一起看代码来玩玩QT之03coordinate
- 一起看代码来玩玩QT之04 Layout
- 一起看代码来玩玩QT之05 Controls
- 一起看代码来玩玩QT之07 Painter
- 一起看代码来玩玩QT之10 Graphics
- 一起看代码来玩玩QT之11 Dialog
- 一起看代码来玩玩QT之17 json
- 一起看代码来玩玩QT之19 Process(进程)
- 一起看代码来玩玩QT之21 HttpClient
- 一起看代码来玩玩QT之23 audioRecord
- 一起看代码来玩玩QT之24 AudioPlayer
- 一起看代码来玩玩QT之08 Draw(first projiect 画板)
- 一起看代码来玩玩QT之09 Signal and SLOT ( 信号和槽)
- 一起看代码来玩玩QT之12 MainWindow(menubar menu ……)
- Android之PowerManager&BatteryManager
- java 反射 getDeclaredField和getField的区别
- 自定义右侧滑动栏 仿联系人
- 32位linux系统下mongodb安装出现的问题
- Qt使用教程之使用Qt Quick UI表单(三)
- 一起看代码来玩玩QT之06EventFilter (事件过滤)
- kidd风的IOS日志之学习用MetalPerformanceShaders进行图像处理(模糊效果)
- xfsdump备份测试
- HTTP 请求方式: GET和POST的比较
- C#多线程学习(六) 互斥对象
- Java中的集合
- IO库的举例
- Java集合的基本使用
- 特殊数据类型