Qt: comment gérer l'événement où l'utilisateur appuie sur le bouton ' X ' (Fermer)?
Je développe une application en utilisant Qt. Je ne sais pas quel emplacement correspond à l'événement "l'utilisateur cliquant sur le bouton'X' (Fermer) du cadre de la fenêtre " c'est-à-dire ce bouton:
S'il n'y a pas d'emplacement pour cela, quelqu'un peut-il me suggérer une autre méthode par laquelle je peux démarrer une fonction après que l'utilisateur appuie sur ce bouton de fermeture.
4 réponses
Si vous avez un QMainWindow
vous pouvez remplacer closeEvent
méthode.
#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();
}
}
si vous sous-classez un QDialog
, le closeEvent
ne sera pas appelé et vous devez donc remplacer 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();
}
}
Eh bien, je l'ai. Une façon est de remplacer le QWidget::closeEvent
(QCloseEvent *event)
méthode dans votre définition de classe et ajoutez votre code dans cette fonction. Exemple:
class foo : public QMainWindow
{
Q_OBJECT
private:
void closeEvent(QCloseEvent *bar);
// ...
};
void foo::closeEvent(QCloseEvent *bar)
{
// Do something
bar->accept();
}
Vous pouvez attacher un emplacement au
void aboutToQuit();
Signal de votre QApplication. Ce signal devrait être déclenché juste avant la fermeture de l'application.
Vous pouvez également réimplémenter le membre protégé QWidget:: closeEvent ()
void YourWidgetWithXButton::closeEvent(QCloseEvent *event)
{
// do what you need here
// then call parent's procedure
QWidget::closeEvent(event);
}