// ============================================================================
//  event_filter_mainwindow  —  Qt 桌面示例
//  来源：川大 C++/LinuxC wiki「02.Qt方向」
//  原文片段：[58954546:6]
//  说明：本文件由 gen_part3.py 从 wiki 片段生成（必要时补 main/QApplication
//        外壳、include、修正笔误）。详见 docs/ERRATA.md。
//        离屏验证：QT_QPA_PLATFORM=offscreen tools/run_qt.sh <target>（自动退出）
// ============================================================================

#include <QApplication>
#include <QMainWindow>
#include <QLabel>
#include <QEvent>
#include <QDebug>
#include <QTimer>

// 事件过滤器：拦截 label 上的事件
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow() {
        label = new QLabel(QStringLiteral("事件过滤器示例"), this);
        label->setGeometry(10, 30, 200, 30);
        label->installEventFilter(this);  // 给 label 安装事件过滤器
    }
protected:
    bool eventFilter(QObject* watched, QEvent* event) override {
        if (watched == label && event->type() == QEvent::MouseButtonPress) {
            qDebug() << "label 上的鼠标按下事件被过滤器拦截";
            return true;  // 拦截，不再派发
        }
        return QMainWindow::eventFilter(watched, event);
    }
private:
    QLabel* label;
};

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);
    MainWindow w;
    w.show();
    // 仅在离屏自动化验证时（QT_QPA_PLATFORM=offscreen）200ms 后自动退出；
    // 正常运行（有显示环境）窗口保持打开，不自动退出。
    if (qgetenv("QT_QPA_PLATFORM") == "offscreen") {
        QTimer::singleShot(200, &app, &QApplication::quit);
    }
    return app.exec();
}

#include "event_filter_mainwindow.moc"
