MDI-Fenster schließen???
Verfasst: 22. Juni 2009 12:54
Ich habe eine MDI-Anwendung in der ich subwindows wie folgt einfüge:
myView *pChild = new MyView;
m_pMdiArea->addSubWindow(pChild);
Leider ist MyView extrem resourcenintensiv, also gibt es einen Button irgendwo in einem Dialog, mit dem ich das aktive MDI-Subwindow schließen kann.
Fragen:
Wie schließe ich ein gerade aktives subwindow, so das alle Resourcen frei gegeben werden.
Muß ich vorher die close-Methode aufrufen?
Im Moment mache ich folgendes, bin mir aber über die Konsequenzen nicht ganz im klaren:
void Hydraca::OnFileClose()
{
// aktives subwindow holen
QMdiSubWindow *pMDI = m_pMdiArea->activeSubWindow();
// aktives MyView holen, ist im aktives subwindow drin
HydracaView *pView = GetActiveMyView();
if ((pMDI != NULL) && (pView != NULL))
{
m_pMdiArea->removeSubWindow(pMDI);
delete pView;
}
} // Hydraca::OnFileClose
Im obigen Beispiel rufe ich erst removeSubWindow und danach delete auf. Ist diese Reihenfolge eigentlich korrekt? Das Programm funktioniert, aber es sind ja zwei Szenarien denkbar:
1) removeSubWindow löscht irgendwann auch MyView, aber der delete-AUfruf kommt meistens vorher (ist also eine Frage der Zeit bis das Programm abstürzt.
2) ich rufe erst delete, das subwindow bemerkt, das das MyView gelöscht wurde und reagiert entsprechend.
Anders gefragt, wie sieht der Mechanismus des Fenster schließens/löschens in MDI-Applikationen allgemein aus?
Danke und Gruß
Andreas
myView *pChild = new MyView;
m_pMdiArea->addSubWindow(pChild);
Leider ist MyView extrem resourcenintensiv, also gibt es einen Button irgendwo in einem Dialog, mit dem ich das aktive MDI-Subwindow schließen kann.
Fragen:
Wie schließe ich ein gerade aktives subwindow, so das alle Resourcen frei gegeben werden.
Muß ich vorher die close-Methode aufrufen?
Im Moment mache ich folgendes, bin mir aber über die Konsequenzen nicht ganz im klaren:
void Hydraca::OnFileClose()
{
// aktives subwindow holen
QMdiSubWindow *pMDI = m_pMdiArea->activeSubWindow();
// aktives MyView holen, ist im aktives subwindow drin
HydracaView *pView = GetActiveMyView();
if ((pMDI != NULL) && (pView != NULL))
{
m_pMdiArea->removeSubWindow(pMDI);
delete pView;
}
} // Hydraca::OnFileClose
Im obigen Beispiel rufe ich erst removeSubWindow und danach delete auf. Ist diese Reihenfolge eigentlich korrekt? Das Programm funktioniert, aber es sind ja zwei Szenarien denkbar:
1) removeSubWindow löscht irgendwann auch MyView, aber der delete-AUfruf kommt meistens vorher (ist also eine Frage der Zeit bis das Programm abstürzt.
2) ich rufe erst delete, das subwindow bemerkt, das das MyView gelöscht wurde und reagiert entsprechend.
Anders gefragt, wie sieht der Mechanismus des Fenster schließens/löschens in MDI-Applikationen allgemein aus?
Danke und Gruß
Andreas