Я наткнулся на это в документации QMainWindow::setMenuBar(QMenuBar * menuBar)
:QMainWindow и право собственности захват политика
Примечание: QMainWindow становится владельцем указателя Menubar и удаляет его в соответствующий момент времени.
Пример кода (в методе класса, производный от QMainWindow
):
QMenuBar * menuBar = new QMenuBar(this);
setMenuBar(menuBar) // <-- immediately transfer ownership
// use menuBar pointer to add actions, menus, and what not
Могу ли я рассчитывать на локальный указатель на моей QMenuBar
после вызова setMenuBar
? Я имею в виду, это полностью гарантировано?
Когда я удалить мой QMainWindow
производный класс, объект QMenuBar
также удаляется, потому что QMainWindow
установлен в качестве его родителя при построении его - но то, что политика заключается в более позднем «собственности захвата» через setMenuBar
, кроме копии справки/указатель?
Я мог бы просто использовать ваш подход, кажется чище. Так что, например, мой двухстрочный код-пример избыточен? Если конструктор QMenuBar получает указатель на QMainWindow, нужен ли позднее вызов setMenuBar? –
Если вы используете 'menuBar()', вам не нужно 'setMenuBar()', строка меню, которую вы получаете, уже хорошо подходит. Вы должны использовать это, если вы не заметите, что заметка о совместном использовании Mac OSX и меню в этом документе, который я связал, касается вас. – Mat
Исправление: 'menuBar' не' getMenuBar' - правильно? –