您的位置:首页 > 编程语言 > Qt开发

Qt 自定义事件

2016-01-03 17:13 369 查看
关于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。

最后贴出输出结果:



打印出来自定义类型的type。

借鉴: Qt学习之路(23): 自定义事件

Qt自定义事件的实现

ok,写博客也不容易,在此感谢许多在博客中写下许多博客的大牛们致敬。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: