Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] setStyleSheet et QColor

Sujet résolu
    15 avril 2010 à 11:52:23

    Bonjour,

    J'ai des sushis pour créer mon propre style.

    J'utilise setStyleSheet() (si je comprends bien c'est du CSS ?).

    Déjà, pour modifier plusieurs widget par exemple QLineEdit et QPushButton, on est obligé de faire ça en 1 ligne ?
    Genre quand je fais:
    this->setStyleSheet("QPushButton{background: red}");
    this->setStyleSheet("QLineEdit{background: red}");
    

    Ca ne prend en compte que la 2ème ligne. Normal ?

    Et j'ai remarqué qu'en faisant en 1 ligne de code ça marche, mais il faut également faire en une seule ligne car sinon le compilo n'est pas content du fait qu'il y'ait un caractère " seul sur la ligne. J'espère que je suis clair.


    Enfin, je n'arrive pas à créer mes propre QColor.
    Je fais :

    QColor maCouleur(10,20,30);
    this->setStyleSheet("QLineEdit{background: maCouleur}");
    


    Et le compilo me dit qu'il ne connait ma maCouleur.

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      15 avril 2010 à 12:09:15

      Un jour je me mettrais à Qt.
      Et un jour je saurais m'en servir.

      D'ici là je ne peux pas t'aider ... :euh:
      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        15 avril 2010 à 18:02:32

        @Ksass`Peuk → Très intéressant ^^.

        1) Oui tu est obligé, pas en une ligne mais en une instruction, donc tu peux faire :

        this->setStyleSheet("QPushButton{background: red}" // Ne pas oublier les double quotes 
                            "QLineEdit{background: red}");
        


        Pour t'aider à comprendre, ce que tu as fait c'est exactement comme si tu faisais :

        QPusButton *button = new QPushButton;
        button->setText("Hello ");
        button->setText("world!"); // Le bouton aura pour texte "world!" et pas "Hello " ni "Hello world!"
        


        2) Tout à fait normal, setStyleSheet prend une QString en paramètre, donc une chaine de caractères.
        Et tu ne peux pas mélanger une variable avec une chaine de caractères (elle sera prise pour du texte).

        Tu pourrais faire :

        "QLineEdit{background: " + maCouleur + "}"
        


        Mais maCouleur est de type QColor et pas QString, donc ça marchera pas.

        Le plus simple serait donc de mettre une valeur HTML :

        "QLineEdit{background: #123456}"
        


        De plus tu pourras dans ce cas y mettre une variable (de type QString) :

        QString html = "123456"; // Attention à mettre les double quotes, ce n'est pas un entier ici
        "QLineEdit{background: #" + html + "}"
        


        Et donc avec un entier :

        int html = 123456; // Attention à ne PAS mettre les double quotes
        "QLineEdit{background: #" + QString::number(html) + "}" // QString::number() pour "transformer" un entier en chaine de caractères
        

        • Partager sur Facebook
        • Partager sur Twitter
          15 avril 2010 à 18:18:23

          Ah mais en plus j'aurais pu trouver c'était logique vu qu'on a faire à un setter ...
          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            15 avril 2010 à 19:29:35

            MelodieNelson > tu fais comme a dit ardamoute mais en utilisant "maCouleur.name()" ;)
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2010 à 11:01:04

              Je ne comprends pas.

              Comme ça ?
              QColor maCouleur(10,20,30);
              this->setStyleSheet("QLineEdit{background: maCouleur.name()}");
              


              Apparemment non car .name() retourne une valeur de format #RRGGBB.
              J'ai essayé .setNamedColor mais je comprends mal son intérêt. Bref, merci tout de même


              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2010 à 11:07:46

                Si j'ai bien compris ( ce qui n'est pas sûr ) ce serait plutôt ça :

                this->setStyleSheet("QLineEdit{background:"+ maCouleur.name()+ ";}");
                


                Parce que le problème dans ça :

                this->setStyleSheet("QLineEdit{background: maCouleur.name();}");
                


                Ce qui si tu regardes bien, ton "maCouleur.name()" est entre les guillemets : resultat le compilateur l'envoie directement en tant que chaine dans le bazar sans recuperer le contenu de ta variable.

                En revanche en fait ça :

                "QLineEdit{background:"+ maCouleur.name()+ ";}"
                


                Le compilo commence par créer une nouvelle chaine avec le contenu de ta variable à la place de ta variable.

                Donc finalement ce qui est envoyé c'est ça :
                this->setStyleSheet("QLineEdit{background: #RRGGBB ;}");
                



                EDIT : J'reviens j'vais assassiner mon voisin moi ...
                • Partager sur Facebook
                • Partager sur Twitter

                Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                  16 avril 2010 à 11:12:22

                  ou plutôt, essaye de remplacer this par qApp(avec le respect majuscules /minuscules)
                  @Ardamoute : très bel exemple :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 avril 2010 à 11:16:18

                    QColor maCouleur(10,20,30);
                    setStyleSheet("QLineEdit,QPushButton { background: "+maCouleur.name()+"; }");
                    


                    Ce qui donnera le même fond aux QLineEdit et aux QPushButton
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                      16 avril 2010 à 11:23:03

                      Citation : Ksass`Peuk


                      this->setStyleSheet("QLineEdit{background:"+ maCouleur.name()+ ";}");
                      


                      Yeees, ça marche impec ! Cimer.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 avril 2010 à 11:24:46

                        NP.

                        Oublie pas de mettre ton post en resolu ^^ .
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                          16 avril 2010 à 11:45:01

                          Bah un dernier truc et j'arrête :

                          J'essaye de modifier fond, plus MenuBar, puis après boutons etc...
                          this->setStyleSheet("background:" + maCouleur.name()
                                              "QMenuBar::item{background:QColor(106,191,189)"}
                          

                          ca ne compile pas du coup.

                          Ah !

                          J'ai trouvé ça :
                          this->setStyleSheet("QMainWindow{background:" + maCouleur.name() +"}"
                                              "QMenuBar::item{background:QColor(106,191,189)"}
                          


                          C'est un peu bourrin mais ça passe.
                          Merci
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 avril 2010 à 13:51:56

                            Je re :

                            J'aimerais faire un dégradé pour la couleur de fond. Possible ?
                            Je me disais qu'il y'avait peut-être moyen de créer une "QColor dégradée". Mais je ne trouve pas.

                            Merci

                            Et c'est quoi le gradientEditor ?

                            Edit :
                            J'ai bien trouvé le QLinearGradient, cependant je ne sais comment l'appliquer dans mon :
                            this->setStyleSheet("QMainWindow{background:" + maCouleur.name() +"}"
                                                "QMenuBar::item{background:QColor(106,191,189)}");
                            

                            On peut transformer un QColor en QLinearGradient ? Ou l'inverse même.

                            Re edit :
                            Bon ok c'est bon j'ai ça :
                            this->setStyleSheet("QMainWindow{background:qlineargradient(..etc..)}"
                                                "QMenuBar::item{background:QColor(106,191,189)}");
                            

                            Je ne comprends pas bien encore les paramètres du qlineargradient mais je vais voir ça.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            [Qt] setStyleSheet et QColor

                            × 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