In short, Qt uses private implementation to manage data. For classes that do this, there usually is an X class and an XPrivate class. The Q_D macro defines the “d” pointer so if you write d->whatever, you have access to that private data part.
This article should pretty much cover most of your questions:
https://wiki.qt.io/D-Pointer