[gelöst] Programm über "X" beenden

Alles rund um die Programmierung mit Qt
Antworten
Paddy82
Beiträge: 9
Registriert: 19. August 2005 08:30

[gelöst] Programm über "X" beenden

Beitrag von Paddy82 »

Hallo,

ich möchte den Benutzer beim Beenden des Programmes gegebenenfalls auffordern zu speichern. Den Slot Quit habe ich bereits geschrieben und wenn der Benutzer das Programm über mein Menü (Datei --> Beenden) verlässt klappt es auch, aber wenn ich auf das X (neben minimieren und maximieren) klicke beendet er einfach so.

Wie kann ich dort auch meine Funktion aufrufen lassen, bzw. wie verknüpfe ich das X mit meiner Quit Funktion?

Gruß Paddy
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Programm über "X" beenden

Beitrag von macman »

Paddy82 hat geschrieben:Wie kann ich dort auch meine Funktion aufrufen lassen, bzw. wie verknüpfe ich das X mit meiner Quit Funktion?
Benenn deine Quit Funktion in closeEvent(QCloseEvent* event) um. Das Event mußt Du natürlich noch mit accept oder ignore bestätigen, je nach dem wie der User entscheidet.
Paddy82
Beiträge: 9
Registriert: 19. August 2005 08:30

Beitrag von Paddy82 »

ich habe noch nie mit events gearbeitet, wie mache ich das denn genau?

wie bzw. wo muss ich accept bzw. ignore einfügen?

closeEvent(QCloseEvent* event) <-- was muss ich als Parameter übergeben?

meine beiden funktionen

Code: Alles auswählen

bool BeautifierWidget::MaybeSaved()
{
    if(!saved)
    { 
        int ret = QMessageBox::warning(this, tr("Application"),
                             tr("The document has been modified.\n"
                                "Do you want to save your changes?"),
                             QMessageBox::Yes | QMessageBox::Default,
                             QMessageBox::No,
                             QMessageBox::Cancel | QMessageBox::Escape);
        if (ret == QMessageBox::Yes)
        {
            SLOT_Save();
            if(saved)
               return true;
            else
               return false;
        }
        else if (ret == QMessageBox::Cancel)
            return false;
    }
    return true;         
}

void BeautifierWidget::closeEvent(QCloseEvent *event)
{
    if (MaybeSaved()) {
        event->accept();
    } else {
        event->ignore();
    }
}
aber leider beendet er einfach ohne nachzufragen.
mir scheint es als würde er die closeEvent Methode nicht benutzen
Zuletzt geändert von Paddy82 am 27. September 2005 10:04, insgesamt 1-mal geändert.
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Events werden, wenn sie auftreten, einfach an dein
Fenster gesendet. Ohne dass du es siehst, sind eine Menge
Funtionen bereits implementiert (da geerbt), die diese Events auffangen.
Wenn du beim Auftreten des QcloseEvent etwas bestimmtes
mache willst, dann sieht das ungefähr so aus:

Code: Alles auswählen

void MyWindow::closeEvent(QCloseEvent *event)
{
  //exec() ruft den Dialog auf und sofern der Benutzer
  //"ja ich will speichern" klickt, gibt er true zurück
  if (saveDialog->exec())
  {
    //alles wird gespeichert
  }

  //Danach kannst du den event einfach an die Basisklasse weitergeben
  //was dann dazu führt, dass dein Fenster geschlossen wird.
  QMainWindow::closeEvent(event);
}
HENNING

PS: Aber genau die gleiche Antwort wird dir sicher Florian gleich geben :lol:
Zuletzt geändert von klogg am 27. September 2005 10:13, insgesamt 1-mal geändert.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das ist eine virtuelle Funktion, die du überschreiben kannst.

Code: Alles auswählen

void MyAnwendung::closeEvent( QCloseEvent *event ) {

  // Hier abhandeln, was der Parameter event machen soll.
}
Paddy82
Beiträge: 9
Registriert: 19. August 2005 08:30

Beitrag von Paddy82 »

Sorry, jetzt klappt es.

Ich habe einfach nochmal alles neu kompilieren lassen und nun geht's.

vielen Dank!!!

gibt es auch einen Event dafür, wenn mein Programm wieder aktiviert wird?

Erläuterung:

-> Der Benutzer öffnet (während mein Programm läuft) Powerpoint auf.
-> Mein Programm verliert den Fokus und der Benutzer arbeitet mit Powerpoint
-> Nun klickt der Benutzer in der Startleiste auf mein Programm

nun bekommt mein Programm ja von Windows den Fokus. Ich würde in diesem Falle gerne ein paar Sachen überprüfen. gibt es da einen Event für?

Sorry falls ich nmich ein bischen dumm ausgedrückt habe
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Guckst du in der Dokumentation unter

All Classes -> QEvent

dort sind alle Events aufgelistet, beschrieben und verlinkt.
Vermutlich brauchst du QFocusEvent...

HENNING
Antworten