Modalen Dialog von "innen heraus" beenden

Alles rund um die Programmierung mit Qt
Antworten
oberschlingel
Beiträge: 85
Registriert: 11. April 2006 09:25
Wohnort: Berlin

Modalen Dialog von "innen heraus" beenden

Beitrag 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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Modalen Dialog von "innen heraus" beenden

Beitrag von solarix »

oberschlingel hat geschrieben:[...]hängt sich der Client auf.[...]
Wo denn genau(Code)?
oberschlingel
Beiträge: 85
Registriert: 11. April 2006 09:25
Wohnort: Berlin

Beitrag 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!
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag 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
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

oh ich hab was gutes fuer dich gefunden:
http://doc.trolltech.com/4.6/qapplicati ... AllWindows
Antworten