Короче говоря, Qt использует частную реализацию для управления данными.Для классов, которые делают это, обычно есть класс X и класс XPrivate.Макрос Q_D определяет указатель «d», поэтому, если вы напишите d-> что угодно, у вас будет доступ к этой частной части данных.
Эта статья должна в значительной степени охватить большинство ваших вопросов:
https://wiki.qt.io/D-Pointer