[Q学习]9 Qt事件系统——投递事件

Qt中如何向一个对象A投递事件E?按照下面三个步骤即可:

1 A是QObejct或者QObject子类的对象;

2 E是QEvent或者QEvent子类的对象;

3 客户端调用A.event(&E)。

代码应该是这样的:


#include <QCoreApplication>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

// 投递事件
    QObject A;
    QEvent E(QEvent::MouseButtonPress);
    A.event(&E);

    return a.exec();
}

解析:

在Qt框架中,事件被定义为一个对象,事件类继承于QEvent类,事件表示应用程序内部已经发生的事情或者应用程序需要知道的外部活动的结果。事件可以被任意QObject及其子类的实例接收和处理。

上述代码中,A是QObject对象;E是QEvent对象,我们将E构造为“鼠标按键点击”的事件;调用bool QObject::event(QEvent *e)接口,完成事件投递。

特别说一下事件类型,Qt中有很多种事件类型,如鼠标事件、键盘事件、窗口事件等等,这些事件都继承于QEvent,每种事件都有一个QEvent::Type类型的编号,通过这个编号,接受者可以识别事件种类。比如上述代码中:

QEvent E(QEvent::MouseButtonPress);

通过QEvent构造函数的参数QEvent::MouseButtonPress构建了一个“按鼠标按键”的事件。

QEvent::Type就是一个整数,系统保留了0~999编号,用户可以自定义1000~65535编号的事件。1000对应着QEvent::User常量,QEvent::MaxUser对应65535。

在自定义事件编号时,推荐使用int QEvent::registerEventType(int hint = -1)方法,将自定义用户编号作为参数传入该接口,如果参数有效,则返回该该参数;如果参数不能使用则返回系统自动分配的编号;如果所有的编号都不可用则返回-1。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章