in src/checks/level0/wrong-qevent-cast.cpp [104:187]
static bool eventTypeMatchesClass(QtUnregularlyNamedEventTypes eventType, const std::string &eventTypeStr, StringRef className)
{
// In the simplest case, the class is "Q" + eventType + "Event"
std::string expectedClassName = std::string("Q") + eventTypeStr + std::string("Event");
if (expectedClassName == className) {
return true;
}
// Otherwise it's unregular and we need a map:
static std::unordered_map<QtUnregularlyNamedEventTypes, ClassNameList, std::hash<int>> map = {
{ActionAdded, {"QActionEvent"}},
{ActionRemoved, {"QActionEvent"}},
{ActionChanged, {"QActionEvent"}},
{ChildAdded, {"QChildEvent"}},
{ChildRemoved, {"QChildEvent"}},
{ChildPolished, {"QChildEvent"}},
{MetaCall, {"QDBusSpyCallEvent", "QDBusCallDeliveryEvent"}},
{DragEnter, {"QDragEnterEvent", "QDragMoveEvent", "QDropEvent"}},
{DragLeave, {"QDragLeaveEvent", "QDragMoveEvent", "QDropEvent"}},
{DragMove, {"QDragMoveEvent", "QDropEvent"}},
{FocusIn, {"QFocusEvent"}},
{FocusOut, {"QFocusEvent"}},
{FocusAboutToChange, {"QFocusEvent"}},
{Gesture, {"QGestureEvent"}},
{GestureOverride, {"QGestureEvent"}},
{GraphicsSceneContextMenu, {"QGraphicsSceneEvent"}},
{GraphicsSceneHoverEnter, {"QGraphicsSceneHoverEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneHoverMove, {"QGraphicsSceneHoverEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneHoverLeave, {"QGraphicsSceneHoverEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneHelp, {"QGraphicsSceneEvent"}},
{GraphicsSceneDragEnter, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneDragMove, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneDragLeave, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneDrop, {"QGraphicsSceneDragDropEvent", "QGraphicsSceneEvent"}},
{GraphicsSceneWheel, {"QGraphicsSceneEvent"}},
{GraphicsSceneResize, {"QGraphicsSceneEvent"}},
{GraphicsSceneMouseMove, {"QGraphicsSceneMouseEvent"}},
{GraphicsSceneMousePress, {"QGraphicsSceneMouseEvent"}},
{GraphicsSceneMouseRelease, {"QGraphicsSceneMouseEvent"}},
{GraphicsSceneMouseDoubleClick, {"QGraphicsSceneMouseEvent"}},
//{ StatusTip, {"QStatusTipEvent" } },
{ToolTip, {"QHelpEvent"}},
{WhatsThis, {"QHelpEvent"}},
{QueryWhatsThis, {"QHelpEvent"}},
{HoverEnter, {"QHoverEvent", "QInputEvent"}},
{HoverLeave, {"QHoverEvent", "QInputEvent"}},
{HoverMove, {"QHoverEvent", "QInputEvent"}},
{KeyPress, {"QKeyEvent", "QInputEvent"}},
{KeyRelease, {"QKeyEvent", "QInputEvent"}},
{ShortcutOverride, {"QKeyEvent", "QInputEvent"}},
{MouseButtonPress, {"QMouseEvent"}},
{MouseButtonRelease, {"QMouseEvent"}},
{MouseButtonDblClick, {"QMouseEvent"}},
{MouseMove, {"QMouseEvent"}},
{NonClientAreaMouseMove, {"QMouseEvent"}},
{NonClientAreaMouseButtonPress, {"QMouseEvent"}},
{NonClientAreaMouseButtonRelease, {"QMouseEvent"}},
{NonClientAreaMouseButtonRelease, {"QMouseEvent"}},
{NonClientAreaMouseButtonDblClick, {"QMouseEvent"}},
{NativeGesture, {"QInputEvent"}},
{OrientationChange, {"QScreenOrientationChangeEvent"}},
{TabletEnterProximity, {"QTabletEvent", "QInputEvent"}},
{TabletLeaveProximity, {"QTabletEvent", "QInputEvent"}},
{TabletPress, {"QTabletEvent", "QInputEvent"}},
{TabletMove, {"QTabletEvent", "QInputEvent"}},
{TabletRelease, {"QTabletEvent", "QInputEvent"}},
{TouchBegin, {"QTouchEvent", "QInputEvent"}},
{TouchCancel, {"QTouchEvent", "QInputEvent"}},
{TouchEnd, {"QTouchEvent", "QInputEvent"}},
{TouchUpdate, {"QTouchEvent", "QInputEvent"}},
{Wheel, {"QInputEvent"}},
{ContextMenu, {"QInputEvent"}}};
auto it = map.find(eventType);
if (it == map.cend()) {
return false;
}
const ClassNameList &classes = it->second;
const bool found = clazy::find(classes, className) != classes.cend();
return found;
}