Qt has several IntEnum's that support custom , user-specified types or roles. A few examples are:  QtCore.Qt.ItemDataRole.UserRole QtCore.QEvent.Type.User  In both cases, a user type/role is created by choosing an integer >= the User type/role myType = QtCore.QEvent.Type.User + 1  The problem is that all of the functions that deal with these type/roles expect an instance of the IntEnum, not an int, and mypy will report an error. from PySide6.QtCore import QEvent class MyEvent(QEvent): def __init__(self) -> None: super().__init__(QEvent.Type.User + 1)  Mypy error: No overload variant of "__init__" of "QEvent" matches argument type "int"  Integrated type checking in VS code with Pylance gives a similar error: No overloads for "__init__" match the provided arguments PylancereportCallIssue QtCore.pyi(2756, 9): Overload 2 is the closest match Argument of type "int" cannot be assigned to parameter "type" of type "Type" in function "__init__" "int" is not assignable to "Type" PylancereportArgumentType  What type hinting can I do from my end to satisfy mypy? Is this something that needs to be changed in Qt type hinting?
In PySide6/PyQt6, the type of a user-defined int enum member should be preserved by using the constructor of the enum: from PySide6.QtCore import QEvent class MyEvent(QEvent): def __init__(self) -> None: super().__init__(QEvent.Type(QEvent.Type.User + 1))  Assuming the latest PySide6 stubs are installed, a file with the above contents will produce no errors when checked with the mypy command-line tool. NB: the implementation defines _missing_ to handle unknown members, and this works for all enums that subclass IntEnum, regardless of whether the values make any sense: >>> QEvent.Type.User <Type.User: 1000> >>> QEvent.Type(QEvent.Type.User + 1) <Type.1001: 1001> >>> QEvent.Type.MaxUser <Type.MaxUser: 65535> >>> QEvent.Type(QEvent.Type.MaxUser + 10) <Type.65545: 65545> >>> >>> QFrame.Shape.__members__ mappingproxy({'NoFrame': <Shape.NoFrame: 0>, 'Box': <Shape.Box: 1>, 'Panel': <Shape.Panel: 2>, 'WinPanel': <Shape.WinPanel: 3>, 'HLine': <Shape.HLine: 4>, 'VLine': <Shape.VLine: 5>, 'StyledPanel': <Shape.StyledPanel: 6>}) >>> QFrame.Shape(42) <Shape.42: 42> 