반응형
Qt : 사용자가 '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);
}
반응형
'IT박스' 카테고리의 다른 글
C ++ 1 문자에서 문자열로 변환? (0) | 2020.08.12 |
---|---|
__init__ 내부에서 클래스 함수 호출 (0) | 2020.08.12 |
AWS CLI를 최신 버전으로 업그레이드하는 방법은 무엇입니까? (0) | 2020.08.12 |
동기화 및 백업에 Core Data, iCloud 및 CloudKit 사용 및 함께 작동하는 방법 (0) | 2020.08.12 |
.NET Process.Start 기본 디렉토리? (0) | 2020.08.11 |