Почему у QAction нет конструктора по умолчанию?

#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.