Welches Signal beim drücken auf "X" ?

Alles rund um die Programmierung mit Qt
Antworten
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Welches Signal beim drücken auf "X" ?

Beitrag von alfonsospringer »

Ich möchte, dass in meinem Programm wenn man das "X" drückt ein "Wollen Sie speichern; Ja,Nein,Abbrechen" Dialog erscheint. Dafür müsste ich wissen, wie das Signal heisst, dass ich abfangen muss. Ich hab mal in der QMainWindow Doku geschaut, aber nichts von einem Siganl closed() oä. finden können. Die zweite Frage die ich habe ist, ob QT bereits einen vorgefertigten "Ja,Nein,Abbrechen" Dialog hat (vllt. als static method?). Man muss ja nicht immer das Rad neu erfunden.

Dankeschön
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Code: Alles auswählen

      virtual void closeEvent(QCloseEvent* event); 

Code: Alles auswählen

      status = QMessageBox::question(this, "Info", "Speichern?", QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
      
      if (status == QMessageBox::Yes)
         save();
      else if (status == QMessageBox::No)
         dontSave();
      else
         fail();
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Welches Signal beim drücken auf "X" ?

Beitrag von macman »

alfonsospringer hat geschrieben:Die zweite Frage die ich habe ist, ob QT bereits einen vorgefertigten "Ja,Nein,Abbrechen" Dialog hat (vllt. als static method?). Man muss ja nicht immer das Rad neu erfunden.
Solltest Du aber, solche Dialoge sind der letzte Dreck. Was ist denn der Unterschied zwischen Nein und Abbrechen? Weißt Du was die Leute bei solchen Standardboxen machen? Sie drücken ESC :roll:
Mach eine eigene Box und versuche für die Button eine eindeutige Beschreibung zu finden, z.B. Sichern/Nicht sichern statt Ja/Abbrechen oder Ja/Nein.

Schätz mal wieviele Trojaner installiert wurden weil niemand mehr Texte liest, sondern einfach immer auf Ja klickt, ohne zu wissen was eigentlich passiert.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Re: Welches Signal beim drücken auf "X" ?

Beitrag von pfid »

macman hat geschrieben:
alfonsospringer hat geschrieben:Die zweite Frage die ich habe ist, ob QT bereits einen vorgefertigten "Ja,Nein,Abbrechen" Dialog hat (vllt. als static method?). Man muss ja nicht immer das Rad neu erfunden.
Solltest Du aber, solche Dialoge sind der letzte Dreck. Was ist denn der Unterschied zwischen Nein und Abbrechen?
Ja bedeutet, du beendest das Programm und speicherst vorher.
Nein bedeutet, du beendest das Programm ohne zu speichern.
Abbrechen bedeutet, du beendest das Programm nicht.

Wenn gefragt wird "Soll gespeichert werden?" Dürfte "ja" und "nein" doch genauso aussagekräftig sein, wie "Sichern" und "Nicht sichern".

Wenn du allerdings generell keine Texte in Dialogen liest, hast du auch mit letzterem ein Problem.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Welches Signal beim drücken auf "X" ?

Beitrag von macman »

pfid hat geschrieben:Wenn du allerdings generell keine Texte in Dialogen liest, hast du auch mit letzterem ein Problem.
Ich lese generell bevor ich auf irgendwas klicke, aber wenn man so die Dozenten unserer Schulungsabteilung hört, da schlackert man nur noch mit den Ohren. "Was hast du da denn jetzt weg geklickt?" "Weiß ich nicht"
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Re: Welches Signal beim drücken auf "X" ?

Beitrag von pfid »

macman hat geschrieben:
pfid hat geschrieben:Wenn du allerdings generell keine Texte in Dialogen liest, hast du auch mit letzterem ein Problem.
Ich lese generell bevor ich auf irgendwas klicke, aber wenn man so die Dozenten unserer Schulungsabteilung hört, da schlackert man nur noch mit den Ohren. "Was hast du da denn jetzt weg geklickt?" "Weiß ich nicht"
Zumindest ich halte es so, dass ich nicht extra für solche Leute einen idiotensicheren Dialog baue ;)

Wenn ich mich recht erinnere, hat sogar M$ in den meisten Produkten Ja/Nein/Abbrechen. Ist doch Standard.
moviemax
Beiträge: 56
Registriert: 10. März 2008 09:49
Wohnort: München

Beitrag von moviemax »

Als Anwender erwartet man beim clicken auf X
das sich das Widget/Dialog schließt! Also das selbe wie [Cancel].

Wozu willst Du den das Rad erfinden ? Funktioniert doch so schon.

Die Auswertung der Eingabe (also irgendwelche Aktionen) machst du hoffentlich erst wenn der Anwender auf [Ok] gecklickt hat

Also bei

[Yes] -> saveChangedFiles(); closeApp()
[No] -> closeApp();

[Cancel] & [X] wird standardmäßig nur der Dialog geschlossen.

moviemax
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

Das Aufrufen des Dialoges klappt soweit ganz gut. Nur ein Problem habe ich noch: Wenn ich Abberechen/Cancel klicke -> wird das Programm beendet, obwohl ich das garnicht geschrieben habe...

Code: Alles auswählen

void MainWindowImpl::closeEvent(QCloseEvent *event)
{
	int status;
	status = QMessageBox::warning(this, "Beenden", "Wollen sie den Charakter speichern?", QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);

	if (status == QMessageBox::Yes) on_actionSave_activated();
	else if (status == QMessageBox::No) on_actionQuit_activated();
	else if (status == QMessageBox::Cancel);

};
edit: Hat sich erledigt: event->ignore() war das gesuchte. Dankeschön
moviemax
Beiträge: 56
Registriert: 10. März 2008 09:49
Wohnort: München

Beitrag von moviemax »

else if (status == QMessageBox::Cancel);
ist böse ! Schreibe doch lieber:

Code: Alles auswählen

else if (status == QMessageBox::Cancel) 
 {
    ; //  noop
  }
moviemax
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Warum ist das böse? Wird doch sowieso beides wegoptimiert.
moviemax
Beiträge: 56
Registriert: 10. März 2008 09:49
Wohnort: München

Beitrag von moviemax »

Richtig, das Auge optimiert es weg!
Es liest sich nicht gut und daher eine Fehlerquelle. Vielleicht
nicht unbedingt an dieser Stelle aber wenn man es sich so angewöhnt
tappt irgendwo sicher einer rein.
Antworten