1. 程式人生 > >Qt 工程中處理Alt+F4鍵,關閉當前頂層介面的問題

Qt 工程中處理Alt+F4鍵,關閉當前頂層介面的問題

可以單獨寫一個事件過濾類,然後需要遮蔽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,訊息,其他訊息也可以通過這個訊息處理類來完成