1 Qt中的自主发送事件
Qt中可以在程序中自主发送事件:
- 阻塞型事件发送:
- 事件发送后需要等待事件处理完成。
- 非阻塞型事件发送:
- 事件发送后立即返回。
- 事件被发送到事件队列中等待处理。
QApplication类提供了支持事件发送的静态成员函数:
- 阻塞型发送函数:
bool sendEvent(QObject* receiver, QEvent* event); - 非阻塞型发送函数:
void postEvent(QObject* receiver, QEvent* event);
注意事项:
- sendEvent中事件对象的生命周期由Qt程序管理:
- 同时支持栈事件对象和堆事件对象的发送。
- postEvent中事件对象的生命周期由Qt平台管理:
- 只能发送堆事件对象。
- 事件被处理后由Qt平台销毁。
使用sendEvent发送事件对象:

使用postEvent发送事件对象:

2 发送系统预定义的事件
示例代码如下:
Widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
QPushButton m_pushButton;
void testSendEvent();
void testPostEvent();
protected slots:
void onButtonClicked();
public:
Widget(QWidget *parent = 0);
bool event(QEvent* evt);
~Widget();
};
#endif // WIDGET_H
Widget.cpp:
#include "Widget.h"
#include <QMouseEvent>
#include <QApplication>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_pushButton.setParent(this);
m_pushButton.setText("Test");
connect(&m_pushButton, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
}

最低0.47元/天 解锁文章
3211

被折叠的 条评论
为什么被折叠?



