2010-06-29 5 views
58

Je veux définir une image sur QPushButton, et la taille de QPushButton devrait dépendre de la taille de l'image. Je suis capable de le faire lors de l'utilisation QLabel, mais pas avec QPushButton. Donc, si quelqu'un a une solution, alors s'il vous plaît aidez-moi.Comment définir une image sur QPushButton?

+1

il y a deux façons à l'aide que vous pouvez définir l'image sur un bouton dans Qt, façon Programmatic de mettre en image http: // qt -articles.blogspot.com/2010/06/how-to-customize-button-in-qt.html à partir de la feuille de style comment l'image est définie, http://qt-articles.blogspot.com/2010/06/ comment-ajouter-stylesheet-pour-button-in-qt.html – Naruto

+0

c'est génial ... ça marche bien .. merci beaucoup ... –

+0

Vous êtes les bienvenus :) si vous sentez que la réponse est correcte, s'il vous plaît marquez-le comme bon, donc cela serait utile pour les autres qui obtiennent le même problème. – Naruto

Répondre

2

Je ne pense pas que vous pouvez définir des images de taille arbitraire sur l'une des classes de boutons existants. Si vous voulez une image simple de se comporter comme un bouton, vous pouvez écrire votre propre QAbstractButton-sous-classe, quelque chose comme:

class ImageButton : public QAbstractButton { 
Q_OBJECT 
public: 
... 
    void setPixmap(const QPixmap& pm) { m_pixmap = pm; update(); } 
    QSize sizeHint() const { return m_pixmap.size(); } 
protected: 
    void paintEvent(QPaintEvent* e) { 
     QPainter p(this); 
     p.drawPixmap(0, 0, m_pixmap); 
    } 
}; 
+0

Merci d'avoir répondu. Voulez-vous m'aider en montrant comment je peux implémenter ce code en utilisant QPushButton au lieu de QAbstractButton. Comme mes exigences sont d'utiliser QPushButton. alors, plz aidez-moi. –

+0

Comme je l'ai dit, je ne pense pas qu'il y ait un bon moyen. Si c'est le cas, QStyle et les feuilles de style peuvent vous aider. Jetez un oeil là-bas. –

+0

merci, pour répondre. –

51

Ce que vous pouvez faire est d'utiliser un pixmap comme une icône, puis mettre cette icône sur le bouton . Pour vous assurer que la taille du bouton sera correcte, vous devez reisze l'icône en fonction de la taille de pixmap.

Quelque chose comme cela devrait fonctionner:

QPixmap pixmap("image_path"); 
QIcon ButtonIcon(pixmap); 
button->setIcon(ButtonIcon); 
button->setIconSize(pixmap.rect().size()); 
+4

Je sais que c'est vieux, mais j'ai fait cela, et l'icône du bouton est toujours celle par défaut. Je ne reçois aucune erreur et tous mes fichiers de ressources semblent être chargés et mes chemins sont bons. Pourquoi cela ne fonctionne-t-il pas pour moi? – mrg95

32
QPushbutton *button = new QPushbutton; 
button->setIcon(QIcon("<imagePath>")); 
button->setIconSize(QSize(65,65)); 
9

Vous peut également définir la taille du bouton.

QPixmap pixmap("image_path"); 
QIcon ButtonIcon(pixmap); 
button->setIcon(ButtonIcon); 
button->setIconSize(pixmap.rect().size()); 
button->setFixedSize(pixmap.rect().size()); 
2

C'est vieux, mais il est toujours utile, Entièrement testé avec QT5.3.

Soyez carreful, par exemple en ce qui concerne le chemin ressources:

Dans mon cas, je crée un répertoire nommé ressources "Ressources" dans le projet de répertoire source.

Le dossier "Ressources" contiennent des images et icons.Then j'ai ajouté un préfixe "Images" dans Qt Alors le chemin pixmap deviennent:

QPixmap pixmap (":/images/Ressources/icone_pdf.png") ;

JF

6

Vous pouvez également utiliser:

button.setStyleSheet("qproperty-icon: url(:/path/to/images.png);"); 

Remarque: Ceci est un peu hacky. Vous ne devriez l'utiliser qu'en dernier recours. Les icônes doivent être définies à partir du code C++ ou Qt Designer.

0

Vous pouvez le faire dans QtDesigner. Il suffit de cliquer sur votre bouton puis aller à la propriété de l'icône, puis choisissez votre fichier image.

0

utiliser juste ce code

QPixmap pixmap ("path_to_icon");
QIcon iconRetour (pixmap);

Notez que:"path_to_icon" est le chemin de l'icône d'image dans le fichier .qrc de votre projet
Vous pouvez trouver comment ajouter .qrc fichier here

Questions connexes