#include <QApplication>
#include <QMainWindow>
#include <QEvent>
#include <QDebug>
class MainWindow : public QMainWindow {
// ...
};
class ModalEventFilter : public QObject {
bool eventFilter(QObject *watched, QEvent *event) override {
if (event->type() == QEvent::MouseMove || event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) {
// 如果弹窗打开,则过滤掉鼠标事件
if (isModal) {
return true; // 过滤掉事件
}
}
return QObject::eventFilter(watched, event);
}
void setModal(bool modal) {
isModal = modal;
}
private:
bool isModal = false;
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;
ModalEventFilter eventFilter;
w.installEventFilter(&eventFilter); // 为主窗口安装事件过滤器
// 弹窗打开时
eventFilter.setModal(true);
// 弹窗关闭时
// eventFilter.setModal(false);
w.show();
return a.exec();
}