Domanda

Sto cercando di creare 2 finestre. 2nd dovrebbe essere chiamato in 1st. Non li collego figlio-genitore. Ma quando ho chiamato la seconda finestra e l'ho chiusa anche la prima finestra. Cosa dovrei fare? Entrambe le finestre sono ereditate da QWidget. C ++ e Qt


Ci scusiamo per la mia scarsa descrizione. Ho una finestra principale. Classe ereditata da QMainWindow. Che ho creato la seconda finestra. Classe ereditata da QWidget. Nella prima (finestra principale) sto creando e chiamando la seconda finestra

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

Senza fornire link al genitore. Tutto funziona bene, ma quando chiudo la seconda finestra (finestra di configurazione) anche la mia finestra principale si chiude. Non ho bisogno di questo. Cosa devo fare per bloccare la chiusura della finestra principale dopo la chiusura della finestra di configurazione.

Spero che descriva un po 'meglio.

La mia prima finestra ha queste bandiere:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

Senza di loro tutto va bene. Potrei cambiare qualcosa se avessi bisogno di quelle bandiere nella mia finestra?

È stato utile?

Soluzione

Ti serve qualcosa del tipo:

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

Ecco il programma di test: http://pastebin.com/f5903c5f4 .

Attenzione, ora devi esplicitamente chiamare quit () nel distruttore della finestra principale.

Se leggi QApplication :: quitOnLastWindowClosure documentata , troverai fuori che:

  

Se questa proprietà è vera, le applicazioni si chiudono quando viene chiusa l'ultima finestra principale visibile (ovvero finestra senza parent) con l'attributo Qt :: WA_QuitOnClose. Per impostazione predefinita, questo attributo è impostato per tutti i widget ad eccezione delle finestre secondarie

Poiché la finestra principale è una finestra degli strumenti (senza cornice), conta. Ciò lascia ConfWindow come unico widget di livello superiore non di Windows. Pertanto, se chiudi ConfWindow, provoca la chiusura dell'istanza dell'applicazione.

Altri suggerimenti

Se questo è il codice, allora c'è un enorme bug in Qt.
Il codice sopra non dovrebbe mai chiudere il tuo primo Windows, ci deve essere qualcos'altro che non va.
L'applicazione è chiusa o si blocca?

Nota
Chi sta cancellando configWindow? C'è un attributo Qt :: WA_DeleteOnClose che cancella la finestra dopo che è stata chiusa.

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top