see my "crutch" example you can simplify it 
#include <QApplication>
#include <QUrl>
#include <QVariant>
#include <QString>
#include <QtGlobal>
#include <QDebug>
#include <QWidget>
#include <QKeyEvent>
#include <QCloseEvent>
#include <QMouseEvent>
#include <QEvent>
class CloseHandler
:public QObject { private:
bool flag;
protected:
{
if(obj->isWidgetType()) {
switch(event->type()) {
qDebug()<<__func__<<"Close";
if(flag){
event->ignore();
return true;
}
//flag = false;
break;
}
if(((QKeyEvent*)event
)->key
() == Qt
::Key_F4 ||
(((QKeyEvent*)event
)->modifiers
() == Qt
::AltModifier)) { flag = true;
}
break;
}
case QEvent::MouseButtonPress://?? case QEvent::MouseButtonRelease://?? flag = false;
default: break;
}
}
return QObject::eventFilter(obj,event
);
}
};
int main(int a ,char** b )
{
CloseHandler h;
w.installEventFilter(&h);
w.show();
return app.exec();
}
#include <QApplication>
#include <QUrl>
#include <QVariant>
#include <QString>
#include <QtGlobal>
#include <QDebug>
#include <QWidget>
#include <QKeyEvent>
#include <QCloseEvent>
#include <QMouseEvent>
#include <QEvent>
class CloseHandler:public QObject {
private:
bool flag;
protected:
bool eventFilter(QObject* obj, QEvent* event)
{
if(obj->isWidgetType()) {
switch(event->type()) {
case QEvent::Close: {
qDebug()<<__func__<<"Close";
if(flag){
event->ignore();
return true;
}
//flag = false;
break;
}
case QEvent::KeyPress: {
if(((QKeyEvent*)event)->key() == Qt::Key_F4 || (((QKeyEvent*)event)->modifiers() == Qt::AltModifier)) {
flag = true;
}
break;
}
case QEvent::MouseButtonPress://??
case QEvent::MouseButtonRelease://??
case QEvent::MouseMove://??
case QEvent::Leave://!!
flag = false;
default: break;
}
}
return QObject::eventFilter(obj,event);
}
};
int main(int a ,char** b )
{
QApplication app(a,b);
QWidget w;
CloseHandler h;
w.installEventFilter(&h);
w.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks