重载QCoreApplication::notify()后该怎么用?
我看Qt手册上说重写QCoreApplication::notify()后可以获得事件处理的完全控制权
Reimplementing this function. This is very powerful, providing complete control; but only one subclass can be active at a time.
于是我把QCoreApplication子类化为MySender后,重写了notify函数,代码如下:
class MySender: public QCoreApplication
{
public:
MySender(int argc,char *argv[]):QCoreApplication(argc,argv){}
public:
bool notify(QObject *receiver, QEvent *event);
};
bool MySender::notify(QObject *receiver, QEvent *event)
{
if(event->type() == MyEventType)
{
qDebug()<<"MyEventType is coming!";
return true;
}
return QCoreApplication::notify(receiver,event);
}
然后我在main()函数中这样应用:
int main(int argc, char *argv[])
{
//QCoreApplication a(argc, argv);
MySender mySender(argc,argv);
MyArmy myArmy;
MyWatcher myWatcher;
myArmy.installEventFilter(&myWatcher);//安装事件过滤器
MyEvent myEvent(MyEventType);
mySender.sendEvent(&myArmy,&myEvent);
return mySender.exec();
}
只输出了重载后的notify()里的那句MyEventType is coming!
然后就什么也没有了,控制台就在那里空等着。
它怎么没有继续向下处理sendEvent中的那个事件myEvent呢?接收者myArmy还要响应这个myEvent进行响应的输出呢。
要是放弃重载notify,用QCoreApplication 声明的a,把mySender有关的注释掉,代码改成下面这样:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//MySender mySender(argc,argv);
MyArmy myArmy;
MyWatcher myWatcher;
myArmy.installEventFilter(&myWatcher);//安装事件过滤器
MyEvent myEvent(MyEventType);
//mySender.sendEvent(&myArmy,&myEvent);
a.sendEvent(&myArmy,&myEvent);
return a.exec();
}
这样就行了,myArmy接收并响应了myEvent,输出正常。
可是我想重载那个notify,到底该怎么做?请大家不吝赐教!