2013-08-15 5 views
0

J'ai un QMainWindow (appelé mainWindow) où l'utilisateur peut entrer plusieurs thigs, comme un chemin vers un fichier, etc. Puis l'utilisateur peut ouvrir une autre fenêtre (appelée secondWindow) en cliquant sur un bouton, faire quelque chose là-bas et enfin revenir à la première fenêtre.Fermer une fenêtre dans Qt4

J'ouvre la deuxième fenêtre et se cacher d'abord un comme ça:

secondWindow *sw = new secondWindow; 
sw->show(); 
this->hide(); //hide the mainWindow 

Lorsque l'utilisateur retourne à mainWindow, toutes choses qu'il configuré manuellement avant, comme le chemin mentionné ci-dessus, devrait encore être là. Donc ma question est: Comment puis-je fermer secondWindow et revenir à mainWindow correctement?

EDIT: StatusBars et ToolBars sont utilisés. Et oui, j'ai besoin de deux fenêtres (en fait j'en ai même plus de deux).

Répondre

0

Vous pouvez émettre un signal depuis closeEvent de secondWindow et connecter ce signal à l'emplacement show() de mainWindow.

secondWindow.h:

public: 
virtual void closeEvent (QCloseEvent * event) 
{ 
    emit secondWindowClosed(); 
    QWidget::closeEvent(event); 
} 
signals: 
void secondWindowClosed(); 

mainwindow.cpp:

secondWindow *sw = new secondWindow; 
connect(sw, SIGNAL(secondWindowClosed()), this, SLOT(show())); 
sw->show(); 
this->hide(); //hide the mainWindow 
+0

Merci, ce que je cherchais. – user2025406

0

sinon en utilisant les caractéristiques de QMainWindow, comme QStatusBar ou QToolbar pour moi le meilleur choix serait d'utiliser QDialog et appeler QDialog::exec().

il apparaîtra modal, de sorte que l'utilisateur est obligé de fermer le dialogue avant d'interagir à nouveau avec le mainWindow. L'autre manière serait d'émettre un signal lors de la fermeture du secondWindow et de libérer toutes les ressources si nécessaire. comme:

void secondWindowClosing(void)//SLOT in mainWindow called by SIGNAL closing() or whatever from secondWindow 
{ 
    secondWindow* wnd = qobject_cast<secondWindow*>(QObject::sender()); 
    if (!wnd) // if the SLOT was called not using signals/slots (may not be needed) 
     return; 
    // get your information of the secondWindow 
    wnd->deleteLater(); // deletes wnd, after the application returns to the event loop 
    this->show(); // display the mainWindow again 
} 
0

Avez-vous vraiment besoin de deux fenêtres? J'utiliserais un QStackedWidget. Un QMainWindow, qui obtient comme widget central un QStackedWidget. Dans le QStackedWidget vos contrôles pour votre première et deuxième fenêtre.