Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4-Win] Problème : détecter une minimisation de QWidget

December 2007 modifié dans Année 2007
Bonjour,

Mon application s'articule autour d'une classe d'interface graphique de type QWidget.
J'ai ajouté une icone dans la system tray (QTrayIcon).

Mon but est de détecter lorsque l'utilisateur minimise ma fenêtre principale, de sorte à la cache (hide()) pour qu'elle n'apparaisse plus en barre des tâche, et que seule demeure ma QTrayIcon.

Je redéfinis donc le hideEvent comme suit :
void hideEvent(QHideEvent*);
void Visionneuse::hideEvent(QHideEvent *event)
{
event->accept();
hide();
}
Que j'accepte ou que j'ignore l'event, le même problème apparait :
- ma fenêtre se réduit en barre des tâches
- ma fenêtre disparait de la barre des tâches
- ma fenêtre réapparait immédiatement dans la barre des tâches
- si j'essai alors de l'afficher, en cliquant dessus, ma fenêtre est vide et seules les bordures apparaissent.

Je ne parviens donc pas à correctement cacher ma fenêtre lorsque l'utilisateur demande à la réduire.

Je suis sous Windows XP SP2, avec Qt4.3.2 static build.

Pourriez-vous me venir en aide, s'il vous plait ?
Deux sujets similaires sont présents sur le forum, mais ils semblent ne correspondent pas à mon problème de part le fait que j'utilise un QWidget et non pas un QDialog.

Réponses

  • et en inversant les deux lignes ? (hide et accept)
  • Ca ne change absolument rien :-)
  • en virant hide() ???

    Il me semble (a verifier) que tu rentre dans hideEvent quand hide() est appelle, hors tu appelles de nouveau hide() dans ton hideenvent -> boucle infinie (toujours si je ne me trompe pas)
  • A vrai dire le hideEvent se déclenche à la fois lors d'un hide() et d'un showMinimized()... Donc oui, c'est une boucle infinie !

    Ahhhhh je comprends enfin pourquoi l'on parlait d'utilise isVisible() dans les autres sujets.
    Dans mon hideEvent, je dois controler si la fenetre est visible (puisque showMinimized()) ou non (si elle a été directeent hide()).

    Merci pour votre aide, je teste cela demain, mais ca me semble être la solution ! ;)
  • Hé bien je ne parviens toujours pas à aire foncitonner cela.

    Voici mon nouvel hideEvent :
    void Visionneuse::hideEvent(QHideEvent *event)
    {
    cout << "hideEvent" << endl;
    event->ignore();

    if (this->isMinimized())
    {
    cout << "is minimized" << endl;
    if (isVisible())
    {
    cout << "is visible" << endl;
    hide();
    }
    }
    }
    Et voici les traces que j'obtiens orsque je minimise ma fenêtre :
    hideEvent
    is minimized
    is visible
    hideEvent
    is minimized
    Si je demande un simple hide() depuis mon constructeur, ma fenêtre ne disparait pas, ce qui semble normal :-).

    Si je clique sur le bouton de minimisation de la fenêtre :
    - elle se réduit
    - elle disparait
    - elle réapparait
    - si je clic dessus, son contenu est vide

    Lorsque je clique sur ma trayIcon, je fais un show().
    Dès lors le contenu de ma fenêtre redevient visible.

    Je vous avoue que je ne comprends pas pourquoi elle réapparait ainsi en barre des taches...
Connectez-vous ou Inscrivez-vous pour répondre.