2 votes

QMainWindow et politique de reprise de propriété

Je suis tombé sur ceci dans la documentation pour QMainWindow::setMenuBar(QMenuBar * menuBar) :

Remarque : QMainWindow prend possession du pointeur de la barre de menu et le supprime au moment opportun.

Exemple de code (dans une méthode d'une classe dérivant de QMainWindow ):

QMenuBar * menuBar = new QMenuBar(this);
setMenuBar(menuBar) // <-- immediately transfer ownership
// use menuBar pointer to add actions, menus, and what not

Puis-je toujours me fier à mon pointeur local vers mon QMenuBar après un appel à setMenuBar ? Je veux dire, est-ce complètement garanti ?

Lorsque je supprime mon QMainWindow la classe dérivée QMenuBar est également supprimé car l'objet QMainWindow est défini comme son parent lors de sa construction - mais quelle politique se cache dans la "prise de possession" ultérieure par le biais de setMenuBar autre qu'une copie de la référence/pointeur ?

1voto

Mat Points 104488

Oui, il est sûr d'utiliser ce pointeur tant que l'objet qui en a pris la propriété est vivant.

Le fait que QMainWindow "prend possession" du menu signifie qu'il se chargera de le supprimer lorsqu'il ne sera plus nécessaire. C'est très courant pour Qt, voir la fonction Arbres et propriété des objets documentation.

Ceci étant dit, votre exemple de code pourrait être réécrit comme ceci :

QMenuBar *menu = menuBar();

Cela permettra créer un menu vide si nécessaire, afin que vous n'ayez pas à vous soucier d'un quelconque transfert de propriété. Il suffit d'appeler cette fonction membre chaque fois que vous avez besoin d'agir sur la barre de menu de Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X