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
[gelöst] Programm über "X" beenden
Re: Programm über "X" beenden
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 hat geschrieben:Wie kann ich dort auch meine Funktion aufrufen lassen, bzw. wie verknüpfe ich das X mit meiner Quit Funktion?
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
aber leider beendet er einfach ohne nachzufragen.
mir scheint es als würde er die closeEvent Methode nicht benutzen
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();
}
}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.
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:
HENNING
PS: Aber genau die gleiche Antwort wird dir sicher Florian gleich geben
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);
}
PS: Aber genau die gleiche Antwort wird dir sicher Florian gleich geben
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:
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.
}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
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