Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Comment insérer une palette de couleurs ?

Faut-il la coder soi-même ?

Sujet résolu
Anonyme
    24 janvier 2009 à 15:53:16

    Bonjour à tous,

    Voici mon (petit) problème :

    J'aimerais créer une interface graphique de jeu avec Qt, où le joueur pourrait choisir la couleur des cheveux de son personnage, la couleur de la peau, etc.

    Seulement voilà, pour permettre à l'utilisateur de choisir n'importe quelle couleur qui existe au monde, j'aimerais mettre une palette de couleurs dans la fenêtre, comme celles que l'on trouve sur les logiciel de traitement d'image (PhotoShop, Paint, PhotoFiltre, et j'en passe). Voici un exemple :

    Image utilisateur


    Ceci de sorte que par exemple, lorsque l'utilisateur choisit une couleur, je change la couleur des cheveux du personnage avec celle qu'il désire... Bien sûr, je n'ai besoin que du rectangle à droite où il y a toutes les couleurs et de la petite barre à côté qui permet de modifier la couleur sélectionnée ; la valeur de rouge ou de bleu, le joueur s'en fout ! :-°
    Mais après quelques recherches fastidieuses sur le net et sur la documentation de Qt, je n'ai toujours pas trouvé le moyen de télécharger une palette et de la mettre dans la fenêtre, ou bien d'utiliser un widget existant de Qt (j'ai vu la classe QPalette, mais je ne sais pas si ça créer automatiquement une palette de couleurs, ou bien si il faut mettre les couleurs dans la palette soi-même).

    En effet, si il faut tout coder, ça risque de prendre du temps, et c'est une centaine de lignes de code pour... presque rien :D !
    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2009 à 15:56:02

      Regarde le tuto de M@teo21 sur Qt (Langage C++ partie 2) il en parle.
      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2009 à 15:57:48

        Tu parles sans doute de ça:

        Tuto de M@teo21 sur Qt (Sélection d'une couleur)

        Bon courage ;)
        • Partager sur Facebook
        • Partager sur Twitter
        Le Monde du Web vous intéresse (Développement Web, Tutoriels...) ? Rejoignez-moi sur YouTube !
        Anonyme
          24 janvier 2009 à 16:11:57

          En effet, vous avez toucher la cible :

          QColorDialog !!!

          Mais en fait, ce n'est pas exactement ce que j'aimerais :

          Si je pouvais enlever les éléments autour et ne garder que le cadre où on peut choisir les couleurs et la petite barre à côté :

          Image utilisateur


          Ce serait vraiment le top ! ;)

          Mais je ne sais malheureusement pas si il existe une méthode pour faire ceci... Et même si je peux la coder moi-même (pourquoi pas, hein :D ) !

          Alors si vous avez d'autres avis, c'est avec plaisir que je vous écoute ! :)
          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2009 à 16:32:57

            le mieux est de le faire toit même alors ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              24 janvier 2009 à 16:50:56

              Heu... :waw::'(:euh:

              Ok, mais alors comment je fais ? Je mets une couleur par pixel, en espérant que je n'oublierai pas un pixel ? :o
              J'ai regardé sur la palette :

              1ère colonne : 255 de rouge, 0 de bleu, 0 de vert ; 254 de rouge, 1 de bleu, 1 de vert ; ect., jusqu'à qu'il y a ait 117 de chaque couleur (du gris quoi)...

              Mais pour le reste, c'est légèrement plus compliqué !!!

              Sinon, je ne pourrais pas insérer ce QColorDialog et mettre des couleurs, des images ou je ne sais pas quoi sur les surfaces que j'aimerais qu'on ne voit pas ? Genre (fait en 2 minutes je préviens :-° ) :

              Image utilisateur
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                24 janvier 2009 à 17:26:54

                Fait en trois minutes (pas relu, pas exempte de bugs potentiels) :
                #ifndef PALETTE_H
                    #define PALETTE_H
                
                    #include <QWidget>
                
                    class QPaintEvent;
                
                    class Palette : public QWidget
                    {
                        Q_OBJECT
                
                        public:
                        	Palette(QWidget * parent = 0, Qt::WindowFlags f = 0);
                
                        protected:
                            void paintEvent(QPaintEvent* event);
                    };
                    
                #endif
                
                #include "Palette.h"
                
                #include <QPaintEvent>
                #include <QPainter>
                
                Palette::Palette(QWidget * parent, Qt::WindowFlags f) 
                :   QWidget(parent, f)
                {
                    setFixedSize(360, 255);
                }
                
                // méthode de dessin
                void Palette::paintEvent(QPaintEvent* event)
                {
                    // on accepte l'événement
                    event->accept();
                
                    // on créé un QPainter pour dessiner sur le widget courant
                    QPainter painter(this);
                
                    // i représente la colonne et la teinte de cette colonne
                    for(unsigned int i = 0; i < 360; ++i)
                    {
                        // j représente la ligne et la saturation de cette ligne
                        for(unsigned int j = 0; j < 255; ++j)
                        {
                            // dessine le pixel (luminosité de 200, à gérer avec le truc de droite)
                            painter.setPen(QColor::fromHsv(i, j, 200));
                            painter.drawPoint(i, 255 - j);
                        }
                    }
                }
                

                Citation : Resultat

                Image utilisateur


                Avec ça tu as la palette en elle-même, je te laisse faire la gestion de la souris et le truc de droite.

                Edit : ajout des commentaires dans le code.
                • Partager sur Facebook
                • Partager sur Twitter
                  24 janvier 2009 à 17:41:42

                  Citation : mcarton

                  Fait en trois minutes (pas relu, pas exempte de bugs potentiels) :
                  Avec ça tu as la palette en elle-même, je te laisse faire la gestion de la souris et le truc de droite.


                  :D c'est exactement un truc comme cela que je pensais :D .
                  Mais je pense qu'il est plus judicieux de faire une QImage. Histoire de ne pas recalculer à chaque paintevent l'image.


                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    24 janvier 2009 à 17:48:24

                    Citation : mongaulois

                    Mais je pense qu'il est plus judicieux de faire une QImage. Histoire de ne pas recalculer à chaque paintevent l'image.

                    Et bien fait ça comme ça (en fait j'ai fait ça vite fait sans vraiment réfléchir :-° ), c'est bien évidemment à améliorer (choix de la couleur (parce que là évidemment ça ne sert à rien :p ), création d'une classe TrucDeDroite, et éventuellement création d'une sur-classe PaletteCompleteAvecLeTrucDeDroite (tu as le droit de choisir un nom plus cour :-° ) qui gère les deux comme un seul widget et qui possède une méthode color()).
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      24 janvier 2009 à 20:28:33

                      Ah, oui, d'accord, là je vois mieux comme c'est en réalité assez simple à faire :D !

                      Je crois que vous m'avez bien aidé, merci beaucoup, je pense que je vais continuer seul à coder mon programme avec tous les conseils que vous m'avez donnés...
                      Sauf si je rencontre un nouveau problème, là je reposterais si le besoin s'en fait sentir ;) !

                      En tout cas, encore merci à tous, et peut-être à bientôt ! :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      [Qt] Comment insérer une palette de couleurs ?

                      × 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