0
Qt中的大多數類都有一個默認構造函數。許多類採用QObject*
或QWidget*
作爲構造函數參數,默認值爲nullptr
。類QAction
也有這樣的構造函數以QObject*
作爲參數,但沒有默認值。因此,QAction
不是默認可構造的。這是爲什麼? QAction
真的需要父母嗎?或者QAction
有其他不同之處,可以解釋這種不一致嗎?爲什麼QAction沒有默認構造函數?
Qt中的大多數類都有一個默認構造函數。許多類採用QObject*
或QWidget*
作爲構造函數參數,默認值爲nullptr
。類QAction
也有這樣的構造函數以QObject*
作爲參數,但沒有默認值。因此,QAction
不是默認可構造的。這是爲什麼? QAction
真的需要父母嗎?或者QAction
有其他不同之處,可以解釋這種不一致嗎?爲什麼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。
它現在在[Qt 5.7]中有一個默認值(https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/kernel/qaction.h?h=5.7#n93 )。但是,它在[Qt 5.6]中沒有默認值(https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/kernel/qaction.h?h=5.6.2 #N87)。 – Mike
@Mike很好。我正在使用Qt 5.5,並不知道這個變化。這解釋了它。謝謝。 –
我只是猜測在這裏,但最初可能有一個原因。 'QWidget :: addAction(QAction *)'不擁有'QAction'對象的所有權,所以也許這是防止內存泄漏的一種方法。 – thuga