The solution with the event filter works (see code below), allthough I don't like it very much:
@
class CustomEventBlocker : public QObject
{
typedef QPair<QObject*, QEvent*> tEvnt;
typedef QList<tEvnt> tEventStore;
tEventStore m_EventStore;
protected:
bool eventFilter(QObject *obj, QEvent *pEvnt){
switch( pEvnt->type()){
case Event::Types::PageOpen:
pEvnt = new Event::PageOpen( *static_cast<Event::PageOpen*>(pEvnt));
break;
default:
return QObject::eventFilter(obj, pEvnt);
}
// store event, post later again
m_EventStore.append( tEvnt( obj,pEvnt) );
return true;
}
public:
CustomEventBlocker()
:QObject()
{
Epam::getInstance().getMainWidget()->installEventFilter( this);
}
~CustomEventBlocker()
{
Epam::getInstance().getMainWidget()->removeEventFilter( this);
// post stored events
tEventStore::iterator iEnd = m_EventStore.end();
for( tEventStore::iterator itor = m_EventStore.begin(); itor != iEnd; ++itor){
QCoreApplication::postEvent( itor->first, itor->second);
}
}
};
//------------------------
int ret = 0;
{
CustomEventBlocker customEventBlocker;
ret = mbox.exec();
}
@