Qt 工程中處理Alt+F4鍵,關閉當前頂層介面的問題
阿新 • • 發佈:2018-12-22
可以單獨寫一個事件過濾類,然後需要遮蔽Alt+F4鍵的介面,新增事件過濾到這個類上。
class Handler : public QObject
{
Q_OBJECT
public:
explicit Handler(QObject *parent = 0);
static Handler* GetInstance();
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
private:
bool flag;
};
Handler* Handler::GetInstance() { static Handler handler; return &handler; } Handler::Handler(QObject *parent) : QObject(parent) { this->installEventFilter(this); } bool Handler::eventFilter(QObject *watched, QEvent *event) { auto type = event->type(); switch (type) { case QEvent::KeyPress: key_type = static_cast<QKeyEvent*>(event)->key(); if(key_type == Qt::Key_Alt ) flag = true; break; case QEvent::KeyRelease: key_type = static_cast<QKeyEvent*>(event)->key(); if(key_type == Qt::Key_Alt) flag = false; break; case QEvent::Close: if(flag) { event->ignore(); } break; default: break; } return true; }
使用方式
Widget w;
w.installEventFilter(Handler::GetInstance());
這樣就可以遮蔽w介面的Alt+F4,訊息,其他訊息也可以通過這個訊息處理類來完成