我的目的是:
点击一个按钮将会建立一个自己定义的事件然后将这个事件发送出去并处理。
但是问题是:
可以点击按钮,第一次可以处理,但是第二次点击按钮之后,就会程序崩溃了,这是怎么回事呢?
代码如下:
- //main.cpp
- /*程序功能:自定义一个事件并且发送自定义的事件
- * 点击一个按钮将会建立一个自己定义的事件然后将这个事件发送出去并处理
- * */
- #include <QApplication>
- #include "myCallback.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc,argv);
- MyCallback my;
- my.show();
- a.exec();
- return 0;
- }
- //myCallback.h
- #ifndef __MYCALLBACK_H
- #define __MYCALLBACK_H
- #include <QWidget>
- #include <QEvent>
- class QString;
- class QPushButton;
- class UserEvent: public QEvent
- {//用户自定义事件类
- public:
- //这里的事件id要大于QEvent::User,小于QEvent::MaxUser
- //registerEventType安全注册一个事件,防止重复,其参数是一个提示仅在可用时用,可为-1.
- //它返回事件id,必须强制转换为QEvent::Type
- UserEvent(QString s):QEvent((QEvent::Type)registerEventType(QEvent::User+1)), sz(s){;}
- QString str() const {return sz;}
- private:
- QString sz;
- };
- class MyCallback:public QWidget
- {
- Q_OBJECT
- public:
- //点击按钮的槽函数用来建立和提交自定义事件
- MyCallback(QWidget *parent = 0);
- protected:
- //这个函数会处理收到的自定义事件
- //当发生自定义的事件的时候自动会调用这个函数
- void customEvent(QEvent *e);
- protected slots:
- void callback(void);
- private:
- QPushButton *button;
- UserEvent *se;
- };
- #endif
- //myCallback.cpp
- #include "myCallback.h"
- #include <QPushButton>
- #include <QApplication>
- #include <QThread>
- #include <iostream>
- using std::cout;
- using std::endl;
- MyCallback::MyCallback(QWidget *parent):QWidget(parent)
- {
- button = new QPushButton(this);
- se = NULL;
- QObject::connect(button, SIGNAL(clicked()), this, SLOT(callback()));
- }
- void MyCallback::callback(void)
- {//点击按钮
- //建立自定义事件
- if(se == NULL)
- {
- se = new UserEvent("my custom event");
- }
- //提交自定义事件
- QApplication::postEvent(this,se);
- //QThread::postEvent(this,se);
- }
- void MyCallback::customEvent(QEvent *e)
- {
- if(e->type() == QEvent::User+1)
- {
- UserEvent *re = (UserEvent*)e;
- cout<<re->str().toLocal8Bit().data()<<endl;
- }
- }
[ 此帖被vaqeteart在2009-12-07 10:58重新编辑 ]