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();
}
}
まあ、私はそれを得た。 1つの方法は、クラス定義で 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);
}