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.