Jak ustawić obraz na QPushButton?

81

Chcę włączyć obraz QPushButton, a rozmiar QPushButtonpowinien zależeć od rozmiaru obrazu. Jestem w stanie to zrobić podczas używania QLabel, ale nie z QPushButton.

Więc jeśli ktoś ma rozwiązanie, pomóż mi.

greshi Gupta
źródło
2
istnieją dwa sposoby ustawiania obrazu na przycisku w Qt, Programowy sposób ustawiania obrazka, qt-articles.blogspot.com/2010/06/… z arkusza stylów, jak ustawiany jest obraz, qt-artykuły. blogspot.com/2010/06/...
Naruto
to świetnie ... działa dobrze .. wielkie dzięki ...
greshi Gupta
Serdecznie witamy :) Jeśli uważasz, że odpowiedź jest prawidłowa, zaznacz ją jako właściwą, aby była pomocna dla innych osób, które mają podobny problem.
Naruto

Odpowiedzi:

69

Możesz użyć piksmapy jako ikony, a następnie umieścić tę ikonę na przycisku.

Aby mieć pewność, że rozmiar przycisku będzie prawidłowy, należy ponownie wyrównać ikonę zgodnie z rozmiarem piksmapy.

Coś takiego powinno działać:

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());
Jérôme
źródło
6
Wiem, że to jest stare, ale zrobiłem to, a ikona przycisku jest nadal domyślna. Nie pojawiają się żadne błędy i wydaje się, że wszystkie moje pliki zasobów są załadowane, a ścieżki są prawidłowe. Dlaczego to nie działa dla mnie?
mrg95,
46
QPushButton *button = new QPushButton;
button->setIcon(QIcon(":/icons/..."));
button->setIconSize(QSize(65, 65));
Sharanabasu Angadi
źródło
10

Możesz także ustawić rozmiar przycisku.

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());
button->setFixedSize(pixmap.rect().size());
Jonathan
źródło
9

Możesz także użyć:

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

Uwaga : to trochę hakerskie. Powinieneś używać tego tylko w ostateczności. Ikony należy ustawić z C++kodu lub Qt Designer.

Iuliu
źródło
4

Nie sądzę, aby można było ustawić obrazy o dowolnych rozmiarach na żadnej z istniejących klas przycisków. Jeśli chcesz, aby prosty obraz zachowywał się jak przycisk, możesz napisać własną podklasę QAbstractButton, na przykład:

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
źródło
Dziękuję za odpowiedź… Czy pomożesz mi, pokazując, jak mogę zaimplementować ten kod za pomocą QPushButton zamiast QAbstractButton. Ponieważ moje wymagania to użycie QPushButton. więc proszę, pomóż mi.
greshi Gupta
Jak powiedziałem, nie sądzę, aby istniał właściwy sposób. Jeśli w ogóle, pomocne mogą być QStyle i arkusze stylów. Zajrzyj tam.
Frank Osterfeld
3

To jest stare, ale nadal przydatne, w pełni przetestowane z QT5.3.

Bądź ostrożny, przykład dotyczący ścieżki zasobów:

W moim przypadku utworzyłem katalog zasobów o nazwie „Ressources” w projekcie katalogu źródłowego.

Folder „ressources” zawiera obrazy i ikony. Następnie dodałem przedrostek „Images” w Qt, więc ścieżka do pixmapy stała się:

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

JF

JFP74
źródło
odpowiedź powinna zawierać więcej informacji, jak używać QPixmap z QPushButton
bunto1
2

Możesz to zrobić w QtDesigner. Wystarczy kliknąć przycisk, a następnie przejść do właściwości ikony, a następnie wybrać plik obrazu.

Nemeth Attila
źródło
Zrób to z podstawowym ustawieniem `` ikony '', przynajmniej po to, aby zobaczyć, jak działa z twoim obrazem, zanim spróbujesz ustawić ikonę według stanu. Ustaw rozmiar ikony tak, aby odpowiadał rozmiarowi obrazu lub przynajmniej był wystarczająco duży, aby obraz nie był wyświetlany.
ClearCrescendo
0

Po prostu użyj tego kodu

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

Zwróć uwagę, że: "path_to_icon"to ścieżka do ikony obrazu w pliku .qrctwojego projektu. Możesz dowiedzieć się, jak dodać .qrcplik tutaj

dqthe
źródło