Domanda

Ho un QDialog sottoclassato contenente un gruppo di QSpinBox sottoclassati.Quando si fa clic su una casella numerica, viene visualizzata una tastiera (un altro QDialog) in cui è possibile utilizzare i pulsanti per inserire le cifre.Entrambi i QDialog vengono attivati ​​chiamando QDialog::exec();

Tuttavia, quando si apre il secondo QDialog, il primo si chiude.L'ho esaminato e ho notato che il primo QDialog non finisce ancora.QDialog 1 invia "QDialog::Rejected" DOPO aver terminato QDialog 2.Quello che vorrei è che QDialog 1 non finisca affatto, deve aggiornare la casella numerica con il valore inserito e aprire più QDialog per altre caselle numeriche che l'utente desidera modificare in seguito.

Penso che abbia a che fare con l'eventloop di QDialog 1 che viene ucciso dall'eventloop di QDialog 2.Ho provato a utilizzare QDialog::show su QDialog 2.Il widget viene visualizzato per un momento (millisecondo) ma non rimane attivo.QAnche la finestra di dialogo 1 viene chiusa immediatamente.

È stato utile?

Soluzione

QDialog 1 è impostato su Qt::Popup, QDialog 2 è impostato su Qt::Dialog per impostazione predefinita.Un popup si chiude su una vasta gamma di eventi.Ho impostato anche il flag di QDialog 2 su Qt::Popup, che non sembra più chiudere QDialog 1.

Altri suggerimenti

Dal modo in cui hai descritto verbalmente il codice, non dovresti vedere il problema che descrivi.Senza vedere il tuo codice effettivo, non potrei azzardare un'ipotesi su cosa stia causando il problema.Comunque posso dire con certezza di aver corso exec() nella finestra di dialogo A, quindi all'interno di quella corsa exec() nella finestra di dialogo B (da un pulsante) e la finestra di dialogo A rimaneva disponibile quando si chiude la finestra di dialogo B.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top