Qt : 사용자가 ‘X'(닫기) 버튼을 누르는 이벤트를 어떻게 처리하나요? 개발 중입니다. “사용자가 창 프레임의 ‘X'(닫기) 버튼을

Qt를 사용하여 응용 프로그램을 개발 중입니다. “사용자가 창 프레임의 ‘X'(닫기) 버튼을 클릭”하는 이벤트 (예 :이 버튼)에 해당하는 슬롯이 무엇인지 모르겠습니다.

이를위한 슬롯이 없다면 사용자가 닫기 버튼을 누른 후 기능을 시작할 수있는 다른 방법을 제안 해 줄 수 있습니다.



답변

있는 경우 메서드 QMainWindow를 재정 의 할 수 있습니다 closeEvent.

#include <QCloseEvent>
void MainWindow::closeEvent (QCloseEvent *event)
{
    QMessageBox::StandardButton resBtn = QMessageBox::question( this, APP_NAME,
                                                                tr("Are you sure?\n"),
                                                                QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                                                QMessageBox::Yes);
    if (resBtn != QMessageBox::Yes) {
        event->ignore();
    } else {
        event->accept();
    }
}

을 서브 클래 싱하는 QDialog경우는 closeEvent호출되지 않으므로 재정의해야합니다 reject().

void MyDialog::reject()
{
    QMessageBox::StandardButton resBtn = QMessageBox::Yes;
    if (changes) {
        resBtn = QMessageBox::question( this, APP_NAME,
                                        tr("Are you sure?\n"),
                                        QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                        QMessageBox::Yes);
    }
    if (resBtn == QMessageBox::Yes) {
        QDialog::reject();
    }
}

답변

글쎄요. 한 가지 방법은 클래스 정의에서 메서드 를 재정의하고 해당 함수에 코드를 추가하는 것입니다. 예:QWidget::closeEvent(QCloseEvent *event)

class foo : public QMainWindow
{
    Q_OBJECT
private:
    void closeEvent(QCloseEvent *bar);
    // ...
};


void foo::closeEvent(QCloseEvent *bar)
{
    // Do something
    bar->accept();
}

답변

SLOT을

void aboutToQuit();

QApplication의 신호. 이 신호는 앱이 종료되기 직전에 발생해야합니다.


답변

또한 보호 된 멤버 QWidget :: closeEvent ()를 다시 구현할 수 있습니다.

void YourWidgetWithXButton::closeEvent(QCloseEvent *event)
{
    // do what you need here
    // then call parent's procedure
    QWidget::closeEvent(event);
}