[Resolu][Qt] maximiser la taille d'une icone sur un bouton

maximiser la taille d'une icone sur un bouton [Resolu][Qt] - C++ - Programmation

Marsh Posté le 26-09-2011 à 16:29:10    

Bonjour,
 
J'essaie de créer un widget personnalité sur la base d'un QPushButton, configuré comme "checkable". Le bouton ne comporte pas de libellé, mais juste une icone.
L'idée est de changer l'icone associée selon l'état "enfoncé" du bouton.
 
Au niveau du constructeur, je passe 2 QPixmap correspondant aux deux icones :

Code :
  1. class Bouton2Etats : public QPushButton
  2. {
  3.     Q_OBJECT
  4. public:
  5.     explicit            Bouton2Etats(QPixmap , QPixmap , QWidget *parent = 0);
  6.                         ~Bouton2Etats();
  7. private slots:
  8.     void                changementEtat( bool );
  9. private:
  10.     QPixmap             m_icon_actif;
  11.     QPixmap             m_icon_inactif;
  12. };


 
Chaque fois que l'état du bouton change, j'appelle la fonction "scaled" sur la QPixmap avant de la réaffecter au bouton via "setIcon" :
 

Code :
  1. Bouton2Etats::Bouton2Etats(QPixmap p_icon_actif , QPixmap p_icon_inactif , QWidget *parent) :
  2.     QPushButton(parent) , m_icon_actif( p_icon_actif ) , m_icon_inactif ( p_icon_inactif )
  3. {
  4.     setCheckable(true);
  5.     setChecked(false);
  6.     m_icon_actif.scaled(size());
  7.     setIcon(QIcon(m_icon_actif));
  8.     connect( this , SIGNAL(clicked( bool )) , this , SLOT( changementEtat( bool ) ) );
  9. }
  10. void Bouton2Etats::changementEtat( bool p_checked ) {
  11.     if ( p_checked == true ) {
  12.         m_icon_inactif.scaled(size());
  13.         setIcon(QIcon(m_icon_inactif));
  14.     } else {
  15.         m_icon_actif.scaled(size());
  16.         setIcon(QIcon(m_icon_actif));
  17.     }
  18. }


 
mais ca ne marche pas...
 
Dans mon slot "changementEtat", j'avais essayé d'appeler setIconSize(size()). Dans ce cas, l'icone change bien de taille, mais ça ne remplit pas complètement le bouton.
 
D'où ma question : comment ajuster la taille de l'icone pour qu'elle occupe tout l'espace du bouton ? Je précise aussi que j'utilise un gestionnaire de disposition pour le bouton, et par conséquent sa taille n'est pas fixe.
 
Merci d'avance !


Message édité par shaoyin le 26-09-2011 à 17:14:33
Reply

Marsh Posté le 26-09-2011 à 16:29:10   

Reply

Marsh Posté le 26-09-2011 à 16:36:46    

parce que m_icon_inactif.scaled(size()) ne modifie pas m_icon_inactif mais te renvoie un autre QPixmap;
donc:
 
QPixmap toto = m_icon_inactif.scaled(size(),Qt::IgnoreAspectRatio);
setIcon(QIcon(toto));
 
ou un truc à peu près comme ça
 
 
 

Reply

Marsh Posté le 26-09-2011 à 17:02:21    

Merci ! Mais si je m'en tiens à ta solution, l'icone reste toute petite dans le bouton. Du coup, j'ai complété avec un appel du genre :
 
setIconSize( toto.size() );
 
... et là, ca marche beaucoup mieux !
 
Merci encore !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed