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 :

Couleur QPushButton juste au survole


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Par défaut Couleur QPushButton juste au survole
    J'ai 2 classes:
    MM_Test qui contient ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MM_Test::MM_Test(QWidget *parent) : QDialog(parent) {
            mmw = new MM_Widget(this);
    	but = new QPushButton(this);
    	this->resize(300, 50);
    	connect(but, SIGNAL(clicked()), this, SLOT(setColor()));
    }
     
    void MM_Test::setColor() {
    	QColor *col = new QColor(255, 0, 0, 0);
    	mmw->setColor(col);
     
    }
    MM_Widget qui dérive de QWidget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void MM_Widget::setColor(QColor *col) {
    	if(col->isValid()) {
    		*mm_color = *col;
    		QPalette pal = colorButton->palette();
    		pal.setColor(QPalette::Button, *mm_color);
    		colorButton->setPalette(pal);
    	}
    }
    La nouvelle couleur de colorButton n'apparait que lorsque je le survole avec ma souris. Si je clic sut but
    Lorsque je clic sur mon bouton (colorButton), j'appelle ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void MM_Widget::updateColor() {
    	QColor col = QColorDialog::getColor(*mm_color, this);
    	if(col.isValid()) {
    		*mm_color = col;
    		QPalette pal = colorButton->palette();
    		pal.setColor(QPalette::Button, *mm_color);
    		colorButton->setPalette(pal);
    	}
    }
    et là, aucun soucis.

    Où ai-je pêché?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    dsl,
    mais j'ai rien compris.....

  3. #3
    Membre éclairé Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Par défaut
    MM_Test contient un bouton but et un widget mmw
    Le Widget contient lui-même un bouton colorButton et d'autres trucs.

    Si je clic sur but, j'appelle mmw->setColor(QColor *col). Là, çà marche pas bien.

    Si je clic sur colorButton, j'appelle updateColor(). Là, çà marche bien.

    Dysfonctionnement:
    La couleur du bouton n'est pas changée. Elle ne change que lorsque je survole le bouton avec ma souris.

    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
    #include "mm_test.h"
    #include <QPushButton>
     
    MM_Test::MM_Test(QWidget *parent) : QDialog(parent) {
    	QVBoxLayout layout(this);
     
    	mmw = new MM_Widget(this);
    	but = new QPushButton(this);
    	layout.addWidget(mmw);
    	layout.addWidget(but);
    	this->resize(300, 50);
    	connect(but, SIGNAL(clicked()), this, SLOT(setColor()));
    }
     
    void MM_Test::setColor() {
    	QColor *col = new QColor(255, 0, 0, 0);
    	mmw->setColor(col);
     
    }
    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 "MM_Widget.h"
     
    MM_Widget::MM_Widget(QWidget *parent) : QWidget(parent) {
    	mm_value = 0;
    	mm_color = new QColor(255, 0, 0, 0);
    	horizontalLayout = new QHBoxLayout(this);
    	horizontalLayout->setContentsMargins(2, 2, 2, 2);
    	checkBox = new QCheckBox("lalala", this);
    	horizontalLayout->addWidget(checkBox);
    	spinBox = new QSpinBox(this);
    	spinBox->setMaximum(500);
    	horizontalLayout->addWidget(spinBox);
    	colorButton = new QPushButton("", this);
    	horizontalLayout->addWidget(colorButton);
    	colorButton->setMaximumHeight(20);
    	spinBox->setEnabled(false);
    	colorButton->setEnabled(false);
     
    	// connections
    	connect(colorButton, SIGNAL(clicked()), this, SLOT(updateColor()));
    }
     
    void MM_Widget::updateColor() {
    	QColor col = QColorDialog::getColor(*mm_color, this);
    	if(col.isValid()) {
    		*mm_color = col;
    		QPalette pal = colorButton->palette();
    		pal.setColor(QPalette::Button, *mm_color);
    		colorButton->setPalette(pal);
    	}
    }
     
     
    void MM_Widget::setColor(QColor *col) {
    	if(col->isValid()) {
    		*mm_color = *col;
    		QPalette pal = colorButton->palette();
    		pal.setColor(QPalette::Button, *mm_color);
    		colorButton->setPalette(pal);
    	}
    }
    ]

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    De ce que j'ai compris,
    quand tu appuie sur but, tu change la palette d'un element d'une autre widget.
    Seulement, ca ne semble pas appeler un update de cette widget.
    Ajoute colorButton->update() http://qt.developpez.com/doc/latest/qwidget.html#update
    a la fin de setColor(QColor *col)

  5. #5
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    salut, pourquoi tu n'utilise pas betement les feuilles de styles ? surtout que le QPushButton supporte le 'box model'

    http://qt.developpez.com/doc/latest/...ng-qpushbutton

    tu utilises hover pour changer la couleur lors du survol du bouton, puis pressed lorsqu'il est appuye et d'autres ...

  6. #6
    Membre éclairé Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Par défaut
    J'ai bien essayé d'ajouter colorButton->update() mais le comportement est toujours aussi déconcertant.

    Capture du widget jointe:
    MM_Widget contient: checkBox, spinBox et 'colorButton'
    MM_Test est la fenêtre contenant MM_Widget + but

    Pourquoi je n'utilise pas CSS?
    Cette appli est un programme perso. Je refais en C++ une application que j'avais réalisé en JAVA il y a quelques années. Le but: dérouiller mon C++ et avoir de la programmation interessante à faire (au boulot, c'est pas souvent le cas).
    CSS, je ne connais pas et çà ne m'intéresse pas. Mais, ici, la problématique est ailleurs de toute façon.
    Images attachées Images attachées  

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

Discussions similaires

  1. Couleur du dernier lien survolé en Css ?
    Par islogged dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 11/10/2012, 23h16
  2. Afficher couleur et infos au survol qui reste persistant après avoir survolé l'élément
    Par majo59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/06/2011, 11h56
  3. Changer la couleur de fond au survol de la souris
    Par sebac dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 02/06/2009, 10h15
  4. Changer la couleur de fond au survol de la souris
    Par sebac dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 29/05/2009, 12h51
  5. Changer de couleur un tr en survol
    Par bubulemaster dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/02/2008, 08h49

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