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

Qt Discussion :

Signal éxistant ou faut il le créer ?


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut Signal éxistant ou faut il le créer ?
    Bonsoir à tous.

    Je reviens faire mumuse avec Qt que j'avais un peu lâché.

    Pour le moment je ne fais strictement rien de sérieux ; je préfère correctement assimiler le fonctionnement de la bête avant d'attaquer la création d'un GUI pour un de mes programmes.

    Mon "projet" actuel se compose de 6 boutons et 3 labels

    il y a 2 boutons pour faire varier la largeur de la fenêtre ; 2 pour la hauteur et 2 pour la transparence.

    Les labels servent à me donner les valeurs


    Le tout connecter à des slots qui fonctionne parfaitement.


    Jusque la ca va, n'ayant pas fixé les dimensions de ma fenêtre, si une personne modifie la taille de la fenêtre via les "coins" mes informations sont donc fausse ( à chaque pression sur un bouton, il y a un MAJ du label correspondant.).

    J'ai donc créer un slot pour faire les MAJ de mes labels or je n'ai pas trouvé de signal correspondant à un changement de dimension de la fenêtre.

    J'ai bien lu quelque chose s'en approchant mais je n'ai pas l'impression que ce soit ce que je cherche.

    Pourriez vous m'aiguiller ?

    Merci d'avance.

    Bonne soirée

  2. #2
    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
    Salut,

    Il n'existe pas de signal au sens Qt émis lors du resize() et que tu pourrais connecter à un slot.

    Par contre, lorsque un resize est fait sur un QWidget, c'est la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void QWidget::resizeEvent(QResizeEvent* event) [virtual protected]
    qui est appelée(doc ici). Tu peux donc la redéfinir dans une classe héritant de QWidget, et ainsi faire ce que tu veux à l'intérieur.

    ATTENTION : Tous les changements de taille vont entraîner un appel à cette fonction (même les tiens). Attention donc aux appels récursifs !

    G.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    J'ai comprie la théorie, mais la pratique c'est pas ca :/

    Il faut donc que je recrée deux fichier ( un .h et un .cpp )

    Dans mon header je déclare ma classe grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MajResize  : public QWidget
    avec deux méthode public : le contructeur MajResize() et la méthode void resizeEvent() .

    Ensuite dans mon cpp je défini ma classe grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MajResize::MajResize() : QWidget()
    C'est bien ca ou je me plante ?

  4. #4
    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
    C'est bien ça oui.

    Voila un petit code d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <QtGui>
    #include <QtCore>
     
    class MyTest : public QWidget
    {
    public:
    	MyTest ( QWidget * parent = 0, Qt::WindowFlags f = 0 ) : QWidget  (parent,f)
    	{label=new QLabel("Changer ma taille", this);}
    protected:
     
    	void resizeEvent(QResizeEvent *event)
    	{
    		QString sizeChange;
     
    		if (event->size().width()>event->oldSize().width())
    			sizeChange+="Ma largeur a augmenté";
    		else
    			sizeChange+="Ma largeur a diminué";
     
     
    		if (event->size().height()>event->oldSize().height())
    			sizeChange+=" et ma hauteur a augmenté.";
    		else
    			sizeChange+=" et ma hauteur a diminué.";
     
    		label->setText(sizeChange);
     
    		event->accept();
    	}
     
    private :
    	QLabel *label;
    };
     
     
     
    int main(int argc, char** argv)
    {
    	QApplication app(argc, argv);
    	MyTest test;
    	test.show();
    	return app.exec();
    }
    Ca marche pas parfaitement parce que la taille égale n'est pas gérée, mais c'est un exemple.

    Tu peux en effet faire un .h et un .cpp. C'est plus propre, je ne peux que te le conseiller.
    "Faites ce que je dis pas ce que je fais"^^.

    Bonne chance

    G.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    Je vous remercie beaucoup de m'avoir expliqué cependant j'ai une question j'ai lu que vous aviez mis la méthode resizeEvent en "protected" je peux donc appeller cette méthode depuis une classe fille via l'héritage ( c'est ce que j'ai cru comprendre de mon cour ) ?

    Je m'y remet des ce soir !

  6. #6
    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
    vous aviez mis la méthode resizeEvent en "protected" je peux donc appeller cette méthode depuis une classe fille via l'héritage ( c'est ce que j'ai cru comprendre de mon cour ) ?
    Oui, en effet. Je l'ai mise en protected car elle est deja en protected dans QWidget. Et il me semble inutile de la rendre publique, puisque finalement elle n'est pas sensée être appelée directement dans ton code.

    G.

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

Discussions similaires

  1. Que faut-il pour créer un serveur web ?
    Par totodu038 dans le forum Hébergement
    Réponses: 2
    Dernier message: 15/03/2010, 13h53
  2. où faut il créer session
    Par hoor3in dans le forum Struts 1
    Réponses: 3
    Dernier message: 03/08/2007, 15h55
  3. Réponses: 8
    Dernier message: 27/07/2007, 14h08
  4. Créer un site : Faut-il faire des declarations ?
    Par jejesochalion dans le forum Droit
    Réponses: 13
    Dernier message: 05/09/2006, 22h38

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