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);
}