[Qt / C++] MdiArea subwindow toevoegen vanuit subwindow

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WernerL
  • Registratie: December 2006
  • Laatst online: 10:16
Hallo mensen,

Ik ben bezig met een QT applicatie waarin ik gebruik maak van een MdiArea. Ik kan prima subwindows aanmaken, maar niet vanuit een subwindow.

Goed, zo doe ik het dus nu:

In mijn QWidget waarin de MdiArea zich bevind heb ik een nieuwe public slot toegevoegd genaamd editProject, vanuit de subwindow voer ik deze code uit:

C++:
1
2
3
4
void Projects::on_listWidget_2_itemDoubleClicked(QListWidgetItem* item)
{
    ((Administratie*)parentWidget())->editProject();
}


De code in de editProject() functie wordt uitgevoerd, tot zover niets mis.

Gaan we naar de editProject() functie toe, deze staat dus in de class Administratie (wat mijn hoofdvenster is waarin de MdiArea staat)

C++:
1
2
3
4
5
6
7
8
void Administratie::editProject()
{
    showProject *p = new showProject;
    QMdiSubWindow *window = new QMdiSubWindow;
    window->setWidget(p);
    window->setAttribute(Qt::WA_DeleteOnClose);
    ui->mdiArea->addSubWindow(window);
}


Door de allerlaatste regel stopt mijn programma met de melding "The program has unexpectedly finished"
Heel vreemd want ik gebruik exact dezelfde code in de constructor van de class en daar werkt het wel. Mijn applicatie crasht dus niet als ik de laatste regel met addSubWindow() weghaal.

Even ter controlle heb ik het zo gedaan:

C++:
1
2
showProject *p = new showProject;
p.show();


En nu krijg ik mijn venster showProject WEL te zien. Maar het is nu dus geen subWindow van mijn MdiArea.

Nu vroeg ik mezelf af wat er dan in hemelsnaam fout kan gaan als ik er een subwindow van wil maken in mijn MdiArea. Ook gezien dezelfde code in dezelfde class maar dan vanuit de constructor WEL werkt.

Iemand enig idee? Ik krijg verder ook geen nuttige error melding, behalve "The program has unexpectedly finished" dus heb echt geen idee meer waar ik nu moet beginnen met zoeken.

Wie kan mij wijze raad geven? Waarom wil hij in de constructor wel doen wat ik zeg, en niet in de editProject functie? :(

//edit
Wanneer ik de functie vanuit de constructor aanroep krijg ik overigens wel netjes de subwindow te zien, maar niet wanneer die functie aangeroepen wordt vanuit een subwindow blijkbaar.

//edit2

Oooow wat ben ik toch ook een prutser...
Een QWidget krijgt standaard niet zijn parent QObject mee... :+
Ik had bij de declaratie van deze subwindow even de parent mee moeten geven.
de variabel parent was namelijk nog leeg.

Projects *p = new Projects(this);
Die this deed het hem dus.

It's fixed ! :)

[ Voor 10% gewijzigd door WernerL op 21-12-2010 00:29 . Reden: Fixed ]

Roses are red, violets are blue, unexpected '{' on line 32.