Seite 1 von 1

Modalen Dialog von "innen heraus" beenden

Verfasst: 6. August 2010 16:25
von oberschlingel
Hallo,

ich habe eine Software geschrieben, die von einem Server über das Netzwerk gesteuert wird und einzelne Widgets des Clients beenden und starten kann.

Wenn der Client nun dem Nutzer aber einen modalen Dialog (MessageBox) zeigt und nun der Server zur gleichen Zeit das Parent-Widget schließt, hängt sich der Client auf.

Gibt es eine Möglichkeit, den geöffneten modalen Dialog zu erkennen und zu beenden, bevor das eigentliche Widget gelöscht wird?

Vielen Dank für eure Antworten.

Re: Modalen Dialog von "innen heraus" beenden

Verfasst: 6. August 2010 16:39
von solarix
oberschlingel hat geschrieben:[...]hängt sich der Client auf.[...]
Wo denn genau(Code)?

Verfasst: 17. August 2010 00:19
von oberschlingel
Sorry für die späte Antwort.

Der Code sieht so aus:

In einem Widget (angezeigt in einem QStackedWidget eines QMainWindow) wird per MessageBox etwas gefragt:

Code: Alles auswählen

void testWidget::showMessage() {
    if (isStarted) {
            switch (QMessageBox::question(this, APP_NAME,
                    tr("Wollen Sie das und das tun?"), tr("&Ja"), tr("&Abbrechen"),
                    0, 1)) {
                    case 1:
                            flag = false;
                            return;
            }
      }
}
Wenn nun das QMainWindow vom Netzwerk (QTcp) eine bestimmte Nachricht bekommt, soll es das Widget oben beenden:

Code: Alles auswählen

MainWindow::getMessage(QString message) {

      if (message == "test") {
            stackedWidget->removeWidget(testWidget);
            disconnect(...);
            delete testWidget;
      }
}

Das Beenden des Widgets funktioniert wunderbar. Wenn allerdings die modale QMessageBox gerade geöffnet ist während das QMainWindow das Widget löschen will, hängt sich die Software auf.

Kennt jemand eine Lösung? Wie kann ich die modale MessageBox von "innen heraus" beenden, bevor das Widget selbst gelöscht wird?

DANKE!

Verfasst: 18. August 2010 03:27
von Nvidia
ok ich kenn mich da nicht so auch,
aber ich wuerde das so loesen, indem ich eine variable auf true setze sobald der Dialog geoeffnet wird, diese kann ich dann abfragen.
und ich verbinde mein eigenes Signal mit dem MessageBox CloseSlot;
wenn die variable auf true ist dann emit Signalblabla;
musst du halt vorher abfragen
nvidia

Verfasst: 19. August 2010 02:32
von Nvidia
oh ich hab was gutes fuer dich gefunden:
http://doc.trolltech.com/4.6/qapplicati ... AllWindows