IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

editeur de liens et eventFilter

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut editeur de liens et eventFilter
    Bonjour,

    J'ai quelques petites questions
    1) J'essaie d'utiliser ce code de base dans un header et je ne comprends pas bien quel est le problème :

    protected :
    bool eventFilter(QObject *obj, QEvent *ev);

    j'ai l'erreur suivante :
    error LNK2001: symbole externe non résolu "protected: virtual bool __thiscall ...

    Par contre avec ce prototype il n'y a pas d'erreur :
    bool eventFilter(QObject *obj, QEvent ev);

    2) J'utilise Qt4.4.3 avec Visual C++ express 2008, le fait que event soit un mot clé vc++ est-il un problème ?

    3) Le but est d'utiliser la méthode décrite ici :
    http://lists.trolltech.com/qt-intere.../msg00277.html
    Est-ce que quelqu'un a déjà testé ? Y-t-il d'autres solutions ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    pour le 1)
    j'avais préparé mon header mais n'utilisais pas encore eventFilter
    une fois la fonction définie, plus de problème de linker

    pour le 3) je m'explique un peu plus :
    j'ai une application MDI, dans laquelle je peux créer plusieurs widget (sous-fenêtres). Sur certaines, j'ai un bouton "Fermer" connecté à un slot close(). Quand on clique sur ce bouton, le widget disparait mais la fenêtre vide reste affichée. Je n'ai pas ce problème en cliquant sur le x de la sous-fenêtre.

    Code pour créer la sous-fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QWidget *window = new SousFenetre;
    window->setAttribute(Qt::WA_DeleteOnClose);
    m_mdiArea->addSubWindow(window);
    window->show();
    Et dans le constructeur du widget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
    Voici la réponse proposée (voir lien) :
    On peut obtenir l'effet d'un "signal on event" sans caster QWidget en utilisant event filter sur le widget qui doit recevoir les events de fermeture.
    (on the widgets you want to observe close events. )

    See the docs on QObject::installEventFilter()

    Dans la fonction eventFilter, juste tester QEvent::CloseEvent et appeler le slot qui était connecté au signal à l'origine.

    Finalement, je patauge quelque peu sans trop savoir quoi mettre où comment.
    Si quelqu'un pouvait m'éclairer de ses lumières...

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    En fait, c'est simple. Le QMdiArea ne gère que les QMdiSubWindow, et lorsque tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_mdiArea->addSubWindow(window);
    Qt crée automatiquement un QMdiSubWindow, et mets ton Widget dedans. Donc si ensuite dans le close tu demandes explicitement le hide() de ton widget et non celle de la subwindow la contenant, tu as le résultat que tu obtiens.

    Pour répondre plus clairement à ta question, c'est le closeEvent de la subwindow que tu dois activer si tu veux faire disparaitre la fenetre de ta mdiArea.

    G.

    Edit : tu as lu le lien que tu as posté ? La solution y est clairement décrite...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Bon, j'ai fini par trouver un signal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(window,SIGNAL(destroyed()),m_mdiArea,SLOT(closeActiveSubWindow()));
    je démêlerai le reste plus tard !

    Merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    ... mais ça ferme toutes les fenêtres
    et finalement eventFilter fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur editeur des liens
    Par elmouvic dans le forum C++
    Réponses: 6
    Dernier message: 04/03/2013, 13h54
  2. editeur de liens
    Par Chillisse dans le forum Outils
    Réponses: 0
    Dernier message: 03/08/2010, 11h44
  3. l'editeur de lien dans cbuilder6
    Par nadiamo dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 05/05/2009, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo