Projet

Général

Profil

Bouton croix de fenêtre

Le bouton de croix de la fenêtre ferme la fenêtre. Cela peut être problématique dans la gestion de la fermeture, par exemple si on souhaite des boutons Annuler et Valider qui ferment la fenêtre en exécutant au passage une action (par exemple rétablissement d'anciens paramètres ou enregistrement de nouveaux)
Voici deux façons de gérer le problème :

Supprimer le bouton croix

Voici un code qui devrait le faire proprement :

    Qt::WindowFlags wFlags = this->windowFlags();
    if(Qt::WindowCloseButtonHint == (wFlags & Qt::WindowCloseButtonHint))
    {
        wFlags = wFlags ^ Qt::WindowCloseButtonHint;
        this->setWindowFlags(wFlags);
    }

Ignorer le bouton croix

Voici un code qui ignore la demande si elle ne provient pas d'un slot

int QObject::senderSignalIndex () const [protected]
Returns the meta-method index of the signal that called the currently executing slot, which is a member of the class returned by sender(). If called outside of a slot activated by a signal, -1 is returned.

Il s'agit de réimplémenter la méthode closeEvent

void MaClasse::closeEvent(QCloseEvent* event)
{
    if (senderSignalIndex() == -1)
    {
        event->ignore();
        return;
    }
    else
    {
        event->accept();
    }
}

Remarque 1 : Cette méthode permet aussi d'ignorer le Alt + F4
Remarque 2 : La solution retenue est de faire les deux : masquer la croix pour ne pas perturber les habitudes des utilisateurs en ayant une croix présente mais qui ne fait pas "com'd'hab" ET réimplémenter closeEvent pour ignorer le Alt + F4

Redmine Appliance - Powered by TurnKey Linux