- 手动发送
- 非堵塞发送 senfEvent()
- 堵塞发送 postEvent()
- QEvent *event=new QEvent(QEvent::Hide);
- QApplication::sendEvent(this,event);//手动发送事件
bool QCoreApplication::sendEvent(QObject *receiver,QEvent *event)
- 在堆栈上创建
- 立刻处理给定的事件
- QKeyEvent myevent(QEvent::KeyPress,Qt::Key_V,Qt::NoModifier);
- qApp->sendEvent(this,&myevent);//发送到this
void QCoreAppliCation::postEvent(QObject*obj,QEvent*event,int priority)
- 会先把事件放到等待调度的队列中
- 必须分配在堆空间
- QKeyEvent myevent(QEvent::KeyPress,Qt::Key_V,Qt::NoModifier);
- qApp->sendEvent(this,&myevent);//发送到this
- QKeyEvent *myEvent=new QKeyEvent(myevent);
- qApp->postEvent(this,myEvent,Qt::NoModifier);
简单的讲就是管理事件的地方,所有的事件都必须先经过这里,然后在进行转发。当bool QEvent* 为true时,就不会在向下转发,false的话还会向下分发。

事件分发器的函数为:
bool event(QEvent* event)
下面举个例子:
在widget.h文件中添加以下事件
- void mousePressEvent(QMouseEvent *event);//鼠标点击事件
- void mouseReleaseEvent(QMouseEvent *event);//鼠标松开事件
- bool event(QEvent *event);//事件分发器
函数的实现:
- void Widget::mousePressEvent(QMouseEvent *event)//鼠标点击事件
- {
- qDebug()<<"鼠标点击";
- }
- void Widget::mouseReleaseEvent(QMouseEvent *event)//鼠标松开事件
- {
- qDebug()<<"鼠标松开";
- }
- bool Widget::event(QEvent *event)//事件分发器
- {
- if(event->type()==QMouseEvent::MouseButtonPress)
- {
- qDebug()<<"被分发器拦截";
- return true;
- }
- else
- {
- return QWidget::event(event);
- }
- }
功能展示:点击鼠标

