2

のドキュメントでこれに出くわしましたQMainWindow::setMenuBar(QMenuBar * menuBar)

注: 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

4

1 に答える 1

1

はい、所有権を取得したオブジェクトが生きている限り、そのポインターを使用しても安全です。

メニューの「所有権を取得する」ということQMainWindowは、メニューが不要になったときにメニューを削除することを意味します。これは Qt では非常に一般的です。オブジェクト ツリーと所有権のドキュメントを参照してください。

そうは言っても、サンプル コードは次のように書き直すことができます。

QMenuBar *menu = menuBar();

これにより、必要に応じて空のメニューが作成されるため、所有権の譲渡について心配する必要はありません。ウィンドウのメニュー バーで操作する必要があるときはいつでも、そのメンバー関数を呼び出すだけです。

于 2013-05-09T14:59:50.720 に答える