为什么 QAction 没有默认构造函数?

Why does QAction not have a default constructor?

Qt 中的大多数 classes 都有默认构造函数。许多 classes 将 QObject*QWidget* 作为构造函数参数,默认值为 nullptr。 class QAction 也有这样一个以 QObject* 作为参数的构造函数,但没有默认值。因此,QAction 不是默认可构造的。这是为什么? QAction 真的需要 parent 吗?或者在 QAction 中是否还有其他不同之处可以解释这种不一致?

这里只是一个猜测,但我想说这背后没有任何理由。

在 Qt 4.8 中,签名(如您所述)没有父级的默认值。

QAction(QObject * parent)

http://doc.qt.io/qt-4.8/qaction.html

这在 Qt 5.7 中发生了变化

QAction(QObject *parent = nullptr)

http://doc.qt.io/qt-5/qaction.html

所以我认为这是一个偶然的不一致,最终在 Qt 5.7 中得到了修复。