// ============================================================================ // event_override_customwidget — Qt 桌面示例 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 原文片段:[58954546:2] // 说明:本文件由 gen_part3.py 从 wiki 片段生成(必要时补 main/QApplication // 外壳、include、修正笔误)。详见 docs/ERRATA.md。 // 离屏验证:QT_QPA_PLATFORM=offscreen tools/run_qt.sh (自动退出) // ============================================================================ #include #include #include #include #include #include class CustomWidget : public QWidget { Q_OBJECT public: explicit CustomWidget(QWidget* p = nullptr) : QWidget(p) {} protected: bool event(QEvent* e) override { if (e->type() == QEvent::KeyPress) { QKeyEvent* ke = static_cast(e); if (ke->key() == Qt::Key_Tab) { qDebug() << "Tab pressed in CustomWidget"; return true; // 事件已处理,不再向上传递 } } return QWidget::event(e); // 其余交给基类 } }; int main(int argc, char* argv[]) { QApplication app(argc, argv); CustomWidget 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_override_customwidget.moc"