Welches Signal beim drücken auf "X" ?
-
alfonsospringer
- Beiträge: 75
- Registriert: 25. September 2007 20:03
Welches Signal beim drücken auf "X" ?
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
Dankeschön
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();
Re: Welches Signal beim drücken auf "X" ?
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 ESCalfonsospringer 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.
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.
Re: Welches Signal beim drücken auf "X" ?
Ja bedeutet, du beendest das Programm und speicherst vorher.macman hat geschrieben:Solltest Du aber, solche Dialoge sind der letzte Dreck. Was ist denn der Unterschied zwischen Nein und Abbrechen?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.
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.
Re: Welches Signal beim drücken auf "X" ?
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"pfid hat geschrieben:Wenn du allerdings generell keine Texte in Dialogen liest, hast du auch mit letzterem ein Problem.
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.
Re: Welches Signal beim drücken auf "X" ?
Zumindest ich halte es so, dass ich nicht extra für solche Leute einen idiotensicheren Dialog bauemacman hat geschrieben: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"pfid hat geschrieben:Wenn du allerdings generell keine Texte in Dialogen liest, hast du auch mit letzterem ein Problem.
Wenn ich mich recht erinnere, hat sogar M$ in den meisten Produkten Ja/Nein/Abbrechen. Ist doch Standard.
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
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
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...
edit: Hat sich erledigt: event->ignore() war das gesuchte. Dankeschön
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);
};ist böse ! Schreibe doch lieber:else if (status == QMessageBox::Cancel);
Code: Alles auswählen
else if (status == QMessageBox::Cancel)
{
; // noop
}-
PeterLustig
- Beiträge: 386
- Registriert: 21. November 2007 20:07