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?
0
A
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.
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
@Mike Bonne prise. Je travaille avec Qt 5.5 et je ne connaissais pas le changement. Cela l'explique. Merci. –
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