Bonjour,

j'ai de nouveau un gros souci que je vais vous exposer :

Pour faire simple, j'ai une QMainWindow utilisant le QMdiArea.
Dans ce dernier je mets une ou plusieurs autres fenetres dérivées de QFrame.
Jusque là tout va bien.
Dans ces fenêtre, il a une QComboBox, et un autre widget : un objet Plot dérivée de QwtPlot qui permet d'afficher une map.
les fenetre possèdent un attribut privée de type Plot appelons le
Plot *obj_plot;
Quand je construis la fenetre pour la première fois, tout va bien, je fais mon obj_plot = new Plot(args...), j'initialise le layout également attribut privé d'une fenetre et je place mon obj_plot dedans tout va bien...


Maintenant j'aimerais qu'en changeant d'item dans la QComboBox, cela affiche une autre map

Donc j'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
connect(level,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLevel(int));
leve est le nom de mon combo, et dans le slot changeLevel,
j'ai tenté différentes choses mais rien ne marche ou ca plante..
j'ai tenté d'abord un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
obj_plot = new Plot(args)
donc je ne détruis pas l'ancien objet Plot...

et ensuite cela ne suffit pas, je vois toujours l'ancien, aucun changement. J'ai tenté des obj_plot.setVisible(true) rien du tout.

Alors j'ai poursuivi en tentant un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
delete obj_plot;
obj_plot = new Plot(args);
si je mets juste le delete, ca marche la map disparait qd je change d'item, evidemment ca bug si je change de nouveau car plus rien a delete.
Si j'ajoute la construction, ca ne bug plus mais evidemment le nouvel objet est placé nul part, enfin je suppose donc il faut le remettre dans le layout, correct ?

mais si je fais ca.. alors j'ai le rapport d'erreur etc.. je ne comprends pas pourquoi.

Une idée ?
Merci d'avance

Je vais donner un peu plus de détails.

je fais maintenant dans le slot changeLevel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
getLayout()->removeWidget(obj_plot);
obj_plot = new Plot(mes arguments);
getLayout().addWidget(obj_plot);
cela marche mais la fenetre s'encombre des dessins dessinés auparavant.

donc comme je l'ai deja dit Plot dérive de QwtPlot

Dans le constructeur de Plot, je crée un QwtPlotSpectrogram appelé spec
et je fais tout un tas de chose y compris un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
spec->attach(this)
J'aurai vraiment pensé qu'en supprimant l'objet du layout, celui disparaitrait.
Mais c'est comme s'il etait en fait dessiné sur la fenetre contenant ce dernier.