#c #qt #constructor #qaction
#c #qt #конструктор #qaction
Вопрос:
Большинство классов в Qt имеют конструктор по умолчанию. Многие классы принимают QObject*
или QWidget*
в качестве аргумента конструктора со значением по умолчанию nullptr
. В классе QAction
также есть такой конструктор, принимающий a QObject*
в качестве аргумента, но значения по умолчанию нет. Следовательно, QAction
не может быть сконструирован по умолчанию. Почему это? Действительно ли a QAction
нужно иметь родителя? Или есть что-то еще, QAction
что объясняет это несоответствие?
Комментарии:
1. Теперь у него есть значение по умолчанию в Qt 5.7 . Однако в Qt 5.6 у него не было значения по умолчанию.
2. @Mike Хороший улов. Я работаю с Qt 5.5 и не знал об изменениях. Это объясняет это. Спасибо.
3. Я просто предполагаю здесь, но может быть причина, по которой это было сделано так изначально.
QWidget::addAction(QAction*)
не принимает права собственности наQAction
объект, так что, возможно, это был способ предотвратить утечки памяти.
Ответ №1:
Здесь просто предположение, но я бы сказал, что для этого нет причин.
В Qt 4.8 подпись (как вы упомянули) не имеет значения по умолчанию для parent .
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.