2 Stimmen

Verwendung des closeEvent in einer qt-Anwendung schließt diese nicht

Ich lerne qt und experimentiere mit Beispielen aus einem Lehrbuch.

Der originale Lehrbuchcode hat die folgende Konfiguration, um beim Anklicken der Schaltfläche "x" zu speichern und zu schließen:

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (okToContinue()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
}

Ich habe mit einem einfachen Exit in seinem Menü experimentiert - und es funktioniert:

void MainWindow::close()
{
    if (okToContinue()) {
        QApplication::quit();
    }
}

Aber ich möchte die bereits geschriebene closeEvent nutzen, also habe ich den obigen Code durch den folgenden ersetzt:

void MainWindow::close()
{
    QCloseEvent *event = new QCloseEvent();
    closeEvent(event);
}

Ich erhalte die Überprüfung auf Änderungen und Speicherung der App, implementiert durch die Funktion okToContinue. Aber die Anwendung schließt nicht.

Ich habe versucht, Debugging zu folgen und... nach meinem kleinen Verständnis scheint es, dass ein Schließsignal gesendet wird...

Ich habe kein gutes Verständnis dafür, kann mir bitte jemand helfen, herauszufinden, was ich falsch mache und wie ich es beheben kann ?

(Der Beispielscode stammt aus dem Buch C++ GUI Programming mit Qt 4, Kapitel 3)

4voto

folibis Punkte 11980

Sie müssen die Funktion MainWindow::close() nicht in Ihrer Unterklasse neu implementieren. Aus den Qt-Dokumenten:

...QCloseEvent gesendet, wenn Sie QWidget::close() aufrufen, um ein Widget programmgesteuert zu schließen...

Sie müssen also nur MainWindow::closeEvent(QCloseEvent *event) neu implementieren, wenn Sie dieses Ereignis steuern möchten.

Dieses Ereignis wird ausgelöst, wenn Sie auf x klicken oder close() im Code aufrufen.

2voto

Die Methoden closeEvent und verwandte Methoden führen nicht tatsächlich die Aktion aus, die stattfindet, wenn ein bestimmtes Ereignis empfangen wird. Sie ermöglichen es Ihnen lediglich, auf das Ereignis zu reagieren und möglicherweise dessen weitere Verarbeitung zu deaktivieren. Das Schließen des Fensters erfolgt innerhalb von QWidget::event, wo closeEvent aufgerufen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X