2016-10-11 2 views
0

La plupart des classes de Qt ont un constructeur par défaut. De nombreuses classes prennent un QObject* ou QWidget* comme argument constructeur avec la valeur par défaut nullptr. La classe QAction a également un tel constructeur prenant un QObject* comme argument, mais il n'y a pas de valeur par défaut. Par conséquent, QAction n'est pas construit par défaut. Pourquoi donc? Est-ce qu'un QAction a vraiment besoin d'un parent? Ou y a-t-il autre chose de différent dans QAction qui explique cette incohérence?Pourquoi QAction n'a-t-il pas de constructeur par défaut?

+3

Sa valeur par défaut est maintenant [Qt 5.7] (https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/kernel/qaction.h?h=5.7#n93). Cependant, il n'avait pas de valeur par défaut dans [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 Bonne prise. Je travaille avec Qt 5.5 et je ne connaissais pas le changement. Cela l'explique. Merci. –

+0

Je devine juste ici, mais il pourrait y avoir une raison pour que cela soit fait comme ça à l'origine. 'QWidget :: addAction (QAction *)' ne prend pas en charge l'objet 'QAction', donc c'était peut-être un moyen d'éviter les fuites de mémoire. – thuga

Répondre

3

Juste une supposition ici, mais je dirais qu'il n'y a aucune raison derrière cela.

Dans Qt 4.8, la signature est (comme vous l'avez mentionné) sans valeur par défaut pour le parent.

QAction(QObject * parent) 

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

Cela change dans Qt 5.7 si

QAction(QObject *parent = nullptr) 

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

Je suppose que ce fut une incohérence accidentelle qui a finalement été réparé avec Qt 5.7.