Qt 自定义事件

关于Qt的自定义事件也是看了几个大牛的博客。总结下心得,如有错误请指出。一起成长。
先给源码。也是第一次原创啊,不知道怎么写,呵呵。

#include <QApplication>
#include <QtGui>
#include <QDebug>


class MyWidget : public QWidget
{
public:
    bool event(QEvent *event);//重载event函数,在event函数中调用自定义的事件,而自定义事件是使用自定义的eventType值来初始化。
};

static const int MyCustomEventType = 1099;

class MyCustomEvent : public QEvent
{
public:
    MyCustomEvent() : QEvent((QEvent::Type)MyCustomEventType) {}
};

bool MyWidget::event(QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
     QKeyEvent *ke = static_cast<QKeyEvent *>(event);
     if (ke->key() == Qt::Key_Tab) {
        return true;
     }
    } else if (event->type() == MyCustomEventType) {
     MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);
       qDebug() << myEvent->type();
       return true;
    }
    return QWidget::event(event);
}

int main(int  argc,char  **argv)
{
    QApplication app(argc,argv);
    MyWidget * w = new MyWidget;
    w->show();
    MyCustomEvent *event = new MyCustomEvent();
    QApplication::postEvent(w,event);
    return app.exec();
}

具体内容就是

  • 要实现event函数,需继承QWidget类,需要在此函数中扑捉MyCustomEvent并做出相应的处理。
  • 要自定义事件,需继承QEvent类,然后做自己需要做的事情。关于MyCustomEvent的初始化还可以使用其它的方式。从新实现构造函数,在构造函数中调用
  • static int QEvent::registerEventType ( int hint = -1 );来获取一个EventType
    最后一个总结:
    自定义事件就是,首先继承于QEvent类,使用一个自定义的EventType的整型值初始化。此值需大于99,因为0~999的值被系统保留了,然后在自定义的Widget中重写event函数,扑捉该事件。至于事件的触发则需要QApplication的静态方法sentEvent和postEvent。
    最后贴出输出结果:
    Qt 自定义事件_第1张图片
    打印出来自定义类型的type。

借鉴: Qt学习之路(23): 自定义事件
Qt自定义事件的实现
ok,写博客也不容易,在此感谢许多在博客中写下许多博客的大牛们致敬。

你可能感兴趣的:(源码,qt)