So the C++ standard does not specify the ABI, unlike for C. This means that generally speaking, every C++ compiler can decide on how to compile certain things, like the already mentioned name mangling, but also memory layout of classes using non C features (like virtual methods, public/private visibility, etc.) and be completely conforming to the ISO Standard.
That said at least Clang (and I think also GCC and MSVC++) decided to have a more or less stable ABI for their compilers, and provide to some degree compatibility with other compilers. This is relatively new (in terms of C++ lifetime, it's been like that for many years now), it highly depends on the compiler you are using. IIRC there was a big break in ABI compatibility back with Clang 3.x to version 4 in 2017ish.
But to take the example of QT, QT provides a list of supported compilers for which the library is compatible with, but they also have a list of settings you must set up for each compiler to ensure it works exactly for that reason. If you want to use a different compiler, or different configurations, QT is not guaranteed to work with that