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.


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());

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));

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());

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.


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 );
    }
};

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


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.