Most classes in Qt have a default constructor. Many classes take a
Just a guess here but I would say there is no reason behind it.
In Qt 4.8 the signature is (as you mentioned) without default value for parent.
QAction(QObject * parent)
This changes in Qt 5.7 though
QAction(QObject *parent = nullptr)
So I assume it was an accidental inconsistency which finally got fixed with Qt 5.7.