Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Probleme time

...

Sujet résolu
    13 juin 2008 à 10:39:26

    Bonjour !
    Je suis en trai de créer un jeu très basique de mastermind :D .
    L'ennui c'est qu'avec Qt je ne trouve pas de fonction style rand et srand.
    Aussi je ne sait pas quoi utilisé comme classe pour afficher des image dans des boutons (peut etre qu'il faut utiliser QLabel ?).
    En tout cas je suis très coincé.
    Merci de vos reponses.
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2008 à 12:31:36

      Pour afficher des images cliquable il faut que tu dérive de QAbstractButton
      et que tu dessine l'image.
      • Partager sur Facebook
      • Partager sur Twitter
      :)
        13 juin 2008 à 13:41:18

        Pour les fonctions rand et srand regarder dans les fonctions global de Qt elles y sont : QRand où quelque chose du genre.

        T'as de la chance je les avais utilisées dans un projet.
        qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
        int alea = 4000 + (qrand() % 1000);
        

        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2008 à 15:59:06

          moii -> ok mais quand tu dis dessiner c'est comme charger une image ?
          guigui' -> dac je vais voir ! ... non ya pas de classe comme sa ... je continu de chercher

          merci
          • Partager sur Facebook
          • Partager sur Twitter
            13 juin 2008 à 16:11:23

            pour ton bouton tu crées un classe qui dérive de QAbstractButton et tu redéfinie la fonction paintEvent(QPaintEvent *event), c'est d'ailleurs la condition obligatoire pour pouvoir créé une instance de ta classe ( pour quelle ne soit plus abstract).
            Et dans ton constructeur (ou n'importe où) tu appelle update() pour redessiner le bouton.

            exemple : pour dessiner un rectangle
            void MonBouton::paintEvent(QPaintEvent *event) // tu n'est pas obliger d'utiliser le event mais la fonction est déclarer comme ça.
            {
                    QPainter painter(this);
                    painter.setPen(Qt::red);
            	QRect rec(20, 20, 40, 40);
                    painter.drawRect(rec);
            }
            


            PS : qrand() et qsrand() existe (je les ai utilisées) se sont des fonctions global de Qt pas des classes.
            http://doc.trolltech.com/4.4/qtglobal.html#qrand
            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2008 à 16:13:33

              Euh en fait je voudrai juste afficher une image dans le bouton en important d'une image externe.

              ... d'accord pour les fonction globales merci !
              • Partager sur Facebook
              • Partager sur Twitter
                13 juin 2008 à 16:20:19

                Dans ce cas :
                void MonBouton::paintEvent(QPaintEvent *event) // tu n'est pas obliger d'utiliser le event mais la fonction est déclarer comme ça.
                {
                        QPainter painter(this);
                        QImage image;
                        image.load("image.png");
                        painter.drawImage(QPoint(0,0,&image);
                }
                


                par contre il te faudra définir la taille de ton bouton sinon tu verras rien.
                • Partager sur Facebook
                • Partager sur Twitter
                  13 juin 2008 à 16:21:38

                  Ok merci pour tout je vais y arriver maintenant !


                  Si pour mon jeu de mastermind quelqu'un a des idees de variantes ou truc comme sa sa minteresse ;) !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 juin 2008 à 16:27:20

                    Citation : guigui'

                    Dans ce cas : [..]



                    Ok pour l'idée mais précisons qu'il vaut mieux que l'image soit chargée ailleurs que dans paintEvent(), ça évite des accès disque à chaque fois qu'il faut redessiner le widget.

                    Edit: Au passage, comme tu l'avais suggéré, on peut aussi passer par un QLabel :
                    #include <QApplication>
                    #include <QLabel>
                    #include <QPixmap>
                    #include <QPushButton>
                    
                    int main(int argc, char *argv[])
                    {
                      QApplication app(argc,argv);
                    
                      QPushButton but("plop");
                    
                      QPixmap img("img.jpg");
                    
                      QLabel lab(&but);  
                      lab.setPixmap(img);
                    
                      but.show();
                    
                      return app.exec();
                    }
                    

                    ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juin 2008 à 16:41:00

                      C'est (je trouve ) génial que l'on puisse passé un QLabe a un QPushButton (c'est un QWidget me diriez vous ! ^^).
                      Merci je préfére la methode avec le label (perso).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 juin 2008 à 18:29:12

                        Tant pis alors ... (d'ailleurs je vais retenir le coût du QLabel ça peu être utile mais bon j'avais utilisé cette technique pour faire un bouton invisible)

                        freecircus : il est vrai que je l'ai pas précisé mais je n'aurais pas charger l'image dans la fonction.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juin 2008 à 18:52:31

                          Citation : vaffreingue

                          moii -> ok mais quand tu dis dessiner c'est comme charger une image ?
                          merci



                          Bon charger oui et non, il l'a dessine l'image.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          :)
                            13 juin 2008 à 18:54:01

                            Ne te vexe pas guigui' mais je trouve que la methode de freecircus est plus simple pour moi qui ai encore du chemin a faire pour arriver a vos niveau (car je pense que vous etes plus fort que moi ...).

                            Mais dessiner c'est créer l'image alors que là l'image je l'ai déja non?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 juin 2008 à 18:55:59

                              Selon ce que j'ai compris il copirait les pixel en mémoire pour l'afficher à l'écran.
                              De toute manière le mot dessiner n'a pas de sens pour cette situation.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              :)
                                13 juin 2008 à 19:01:15

                                Dac je pensait en fait qu'il falait entirement redessiner l'image ( :euh: ).
                                Mais je vais faire comme sa .

                                A propos voila les bouton que je voudrai afficher sur les bouton ( o_O )
                                ... heu comment on met des image ? ...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 juin 2008 à 19:24:28

                                  Bon je te montre comment j'ai fais:
                                  #ifndef H_MYBUTTON_H
                                  #define H_MYBUTTON_H
                                  
                                  #include <QAbstractButton>
                                  #include <QPainter>
                                  #include <QString>
                                  #include <QPixmap>
                                  #include <QPaintEvent>
                                  #include <QLabel>
                                  
                                  class MyButton : public QAbstractButton
                                  {
                                  	public:
                                  		MyButton(const QString image, QWidget *parent=0);
                                  		
                                  		virtual QSize sizeHint() const;
                                  
                                  	protected:
                                  		virtual void paintEvent(QPaintEvent *);
                                  
                                  	private:
                                  		QPixmap *pixmap;
                                  };
                                  
                                  #endif
                                  

                                  #include "myButton.h"
                                  
                                  MyButton::MyButton(const QString image, QWidget *parent) : QAbstractButton(parent)
                                  {
                                      pixmap = new QPixmap(image);
                                  }
                                  
                                  QSize MyButton::sizeHint() const
                                  {
                                      return pixmap->size();
                                  }
                                      
                                  
                                  void MyButton::paintEvent(QPaintEvent *e)
                                  {
                                      QPainter p(this);
                                      p.drawPixmap(0, 0, *pixmap);
                                  }
                                  
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  :)
                                    14 juin 2008 à 12:58:50

                                    Non non je voulait dire mettre une image sur le site du zero pour illustrer mes message (pas dans la signature mais dans le corps du texte).
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      14 juin 2008 à 13:42:17

                                      Image utilisateur

                                      voila je compte faire des bouton de ce style (créé avec un tuto sur gimp du sdz).
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        14 juin 2008 à 15:27:38

                                        Enregistres les en .png, pour eviter le fond blanc inutile et moche!
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          14 juin 2008 à 16:37:28

                                          Dac merci du conseil !
                                          Ces images je les met dans des QLabel puis dans des QPushButton mais elle gardes leurs tailles initiales peut on les redimensionner automatiquement ou faut-il les faire directement a la bonne taile ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            14 juin 2008 à 17:14:28

                                            en utilisant ma classe (myButton) :

                                            MyButton* bouton = new MyButton("img/image.jpg"); // tu met le format que tu veux.
                                            bouton->setCursor(Qt::PointingHandCursor);
                                            bouton->setToolTip("Bouton");
                                            connect(bouton, SIGNAL(clicked()), this, SLOT(a_monSlotPerso()));
                                            
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            :)
                                              14 juin 2008 à 19:00:26

                                              D'accord sinon ya pas une methode de Qt ?
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                14 juin 2008 à 22:58:24

                                                sinon les fonction rand et srand standard sont toujours disponibles, dans leur header...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  14 juin 2008 à 22:59:47

                                                  Dac !
                                                  youyou-> je compte réutiliser les version de Qt
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  [Qt] Probleme time

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown