Wie setze ich ein Bild auf QPushButton?

81

Ich möchte ein Bild aktivieren QPushButton, und die Größe von QPushButtonsollte von der Größe des Bildes abhängen. Ich kann dies tun, wenn ich es benutze QLabel, aber nicht mit QPushButton.

Wenn jemand eine Lösung hat, helfen Sie mir bitte.

Greshi Gupta
quelle
2
Es gibt zwei Möglichkeiten, wie Sie das Bild auf einer Schaltfläche in Qt einstellen können: Programmatische Methode zum Einstellen des Bildes, qt-articles.blogspot.com/2010/06/… aus dem Stylesheet , wie das Bild eingestellt wird, qt-Artikel. blogspot.com/2010/06/…
Naruto
das ist großartig ... es funktioniert gut ... vielen Dank ...
greshi Gupta
Gern geschehen :) Wenn Sie der Meinung sind, dass die Antwort richtig ist, markieren Sie sie bitte als richtig, damit sie für andere hilfreich ist, die ein ähnliches Problem haben.
Naruto

Antworten:

69

Sie können eine Pixmap als Symbol verwenden und dieses Symbol dann auf die Schaltfläche setzen.

Um sicherzustellen, dass die Größe der Schaltfläche korrekt ist, müssen Sie das Symbol entsprechend der Größe der Pixmap neu sortieren.

So etwas sollte funktionieren:

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());
Jérôme
quelle
6
Ich weiß, dass dies alt ist, aber ich habe dies getan, und das Drucktasten-Symbol ist immer noch das Standard-Symbol. Ich erhalte keine Fehler und alle meine Ressourcendateien scheinen geladen zu sein und meine Pfade sind gut. Warum funktioniert das bei mir nicht?
mrg95
46
QPushButton *button = new QPushButton;
button->setIcon(QIcon(":/icons/..."));
button->setIconSize(QSize(65, 65));
Sharanabasu Angadi
quelle
10

Möglicherweise möchten Sie auch die Größe der Schaltfläche festlegen.

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

Sie können auch verwenden:

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

Hinweis : Dies ist ein wenig hacky. Sie sollten dies nur als letzten Ausweg verwenden. Symbole sollten aus C++Code oder gesetzt werden Qt Designer.

Iuliu
quelle
4

Ich glaube nicht, dass Sie Bilder mit beliebiger Größe für eine der vorhandenen Schaltflächenklassen festlegen können. Wenn Sie möchten, dass sich ein einfaches Bild wie eine Schaltfläche verhält, können Sie Ihre eigene QAbstractButton-Unterklasse schreiben, etwa:

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 );
    }
};
Frank Osterfeld
quelle
Vielen Dank für Ihre Antwort. Helfen Sie mir bitte, indem Sie zeigen, wie ich diesen Code mithilfe von QPushButton anstelle von QAbstractButton implementieren kann. Da meine Anforderungen sind, QPushButton zu verwenden. Also, bitte hilf mir.
Greshi Gupta
Wie gesagt, ich glaube nicht, dass es einen richtigen Weg gibt. Wenn überhaupt, könnten QStyle und Stylesheets hilfreich sein. Schau mal dort hin.
Frank Osterfeld
3

Dies ist alt, aber es ist immer noch nützlich. Vollständig mit QT5.3 getestet.

Seien Sie vorsichtig, Beispiel für den Ressourcenpfad:

In meinem Fall habe ich im Quellverzeichnisprojekt ein Ressourcenverzeichnis mit dem Namen "Ressources" erstellt.

Der Ordner "ressources" enthält Bilder und Symbole. Dann habe ich in Qt ein Präfix "Images" hinzugefügt. So wird der Pixmap-Pfad:

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

JF

JFP74
quelle
Die Antwort sollte weitere Informationen zur Verwendung der QPixmap mit dem QPushButton
bunto1
2

Sie können dies in QtDesigner tun. Klicken Sie einfach auf Ihre Schaltfläche, gehen Sie zur Symboleigenschaft und wählen Sie dann Ihre Bilddatei aus.

Nemeth Attila
quelle
Tun Sie dies mit der Grundeinstellung "Symbol", zumindest um zu sehen, ob es mit Ihrem Bild funktioniert, bevor Sie versuchen, das Symbol pro Status festzulegen. Stellen Sie die Größe des Symbols so ein, dass es der Ihres Bildes entspricht oder zumindest groß genug für Ihr Bild ist. Andernfalls wird es nicht angezeigt.
ClearCrescendo
0

Verwenden Sie einfach diesen Code

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

Beachten Sie Folgendes: "path_to_icon"ist der Pfad des Bildsymbols in der Datei .qrcIhres Projekts. Informationen zum Hinzufügen einer .qrcDatei finden Sie hier

dqthe
quelle