2 Stimmen

QDialog, das ein weiteres QDialog öffnet

Ich habe einen QDialog mit Unterklassen, die eine Menge von QSpinBox-Unterklassen enthalten. Wenn man auf einen SpinBox klickt, erscheint eine Tastatur (ein weiterer QDialog), in dem man über Schaltflächen Zahlen eingeben kann. Beide QDialog's werden aktiviert, indem man QDialog::exec() aufruft;

Wenn man jedoch diesen 2. QDialog öffnet, schließt sich der erste. Ich habe den Ablauf analysiert und festgestellt, dass der erste QDialog noch nicht beendet ist. QDialog 1 sendet "QDialog::Rejected" NACHDEM ich QDialog 2 abgeschlossen habe. Was ich möchte, ist, dass der QDialog 1 überhaupt nicht endet, er sollte den SpinBox mit dem eingegebenen Wert aktualisieren und weitere QDialog's für andere SpinBoxen öffnen, die der Benutzer später bearbeiten möchte.

Ich denke, es hängt damit zusammen, dass die Ereignisschleife von QDialog 1 durch die Ereignisschleife von QDialog 2 beendet wird. Ich habe versucht, QDialog::show bei QDialog 2 zu verwenden. Das Widget wird für einen Moment (Millisekunde) angezeigt, bleibt aber nicht aktiv. QDialog 1 wird auch sofort geschlossen.

3voto

Pieter Punkte 1165

QDialog 1 ist auf Qt::Popup gesetzt, QDialog 2 wurde standardmäßig auf Qt::Dialog gesetzt. Ein Popup schließt sich bei einer Vielzahl von Ereignissen. Ich habe auch das Flag von QDialog 2 auf Qt::Popup gesetzt, was anscheinend QDialog 1 nicht mehr schließt.

2voto

Auf Grundlage der von Ihnen mündlich beschriebenen Codeänderung dürfte das von Ihnen beschriebene Problem nicht auftreten. Ohne Ihren tatsächlichen Code zu sehen, kann ich nicht erraten, was das Problem verursacht. Ich kann jedoch mit Sicherheit sagen, dass ich exec() auf Dialog A ausgeführt habe, und dann darin exec() auf Dialog B (von einem Button aus) ausgeführt habe und Dialog A nach dem Beenden von Dialog B verfügbar geblieben ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X