2016-10-11 73 views
0

Qt中的大多數類都有一個默認構造函數。許多類採用QObject*QWidget*作爲構造函數參數,默認值爲nullptr。類QAction也有這樣的構造函數以QObject*作爲參數,但沒有默認值。因此,QAction不是默認可構造的。這是爲什麼? QAction真的需要父母嗎?或者QAction有其他不同之處,可以解釋這種不一致嗎?爲什麼QAction沒有默認構造函數?

+3

它現在在[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

+0

@Mike很好。我正在使用Qt 5.5,並不知道這個變化。這解釋了它。謝謝。 –

+0

我只是猜測在這裏,但最初可能有一個原因。 'QWidget :: addAction(QAction *)'不擁有'QAction'對象的所有權,所以也許這是防止內存泄漏的一種方法。 – thuga

回答

3

只是在這裏猜測,但我會說沒有理由背後。

在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。

相關問題