Як встановити зображення на QPushButton?


81

Я хочу встановити зображення QPushButton, і його розмір QPushButtonповинен залежати від розміру зображення. Я можу це робити під час використання QLabel, але не з QPushButton.

Тож, якщо хтось має рішення, то, будь ласка, допоможіть мені.


2
Є два способи, за допомогою яких ви можете встановити зображення на кнопку в Qt, Програмний спосіб встановлення зображення, qt-articles.blogspot.com/2010/06/... із таблиці стилів, як встановлюється зображення, qt-статей. blogspot.com/2010/06/…
Наруто

це чудово ... це чудово працює .. дякую багато ...
greshi Gupta

Вас ласкаво просимо :) якщо ви вважаєте, що відповідь правильна, будь ласка, позначте її як правильну, щоб це було корисно для інших, хто має подібну проблему.
Наруто

Відповіді:


69

Що ви можете зробити, це використовувати pixmap як піктограму, а потім помістити цю піктограму на кнопку.

Щоб переконатися, що розмір кнопки буде правильним, вам слід змінити розмір піктограми відповідно до розміру піксельної карти.

Щось на зразок цього має працювати:

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

6
Я знаю, що це старе, але я це зробив, і кнопковий значок все ще залишається типовим. Я не отримую помилок, і всі мої файли ресурсів, здається, завантажені, і мої шляхи хороші. Чому це не працює для мене?
mrg95


10

Ви також можете встановити розмір кнопки.

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

9

Ви також можете використовувати:

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

Примітка : Це трохи хакі. Ви повинні використовувати це лише в крайньому випадку. Значки слід встановлювати з C++коду або Qt Designer.


4

Я не думаю, що ви можете встановити зображення довільного розміру для будь-якого з існуючих класів кнопок. Якщо ви хочете, щоб просте зображення поводилося як кнопка, ви можете написати власний підклас QAbstractButton, приблизно так:

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

Дякуємо за відповідь. Чи можете ви допомогти мені, показавши, як я можу реалізувати цей код, використовуючи QPushButton замість QAbstractButton. Оскільки мої вимоги полягають у використанні QPushButton. отже, допоможіть мені допомогти.
greshi Gupta

Як я вже сказав, я не думаю, що існує правильний спосіб. Якщо взагалі, QStyle та таблиці стилів можуть допомогти. Погляньте там.
Frank Osterfeld

3

Це старе, але все ще корисне, повністю протестоване з QT5.3.

Будьте обережні, приклад щодо шляху ресурсів:

У моєму випадку я створив каталог ресурсів з назвою "Ресурси" у проекті вихідного каталогу.

У папці "Ресурси" містяться зображення та значки. Потім я додав префікс "Зображення" в Qt. Таким чином шлях до pixmap стає:

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

JF


відповідь повинна надати більше інформації про те, як використовувати QPixmap з QPushButton
bunto1

2

Ви можете зробити це в QtDesigner. Просто натисніть на кнопку, потім перейдіть до властивості піктограми, а потім виберіть файл зображення.


Зробіть це за допомогою базового налаштування `` піктограма '', принаймні, щоб побачити, як воно працює з вашим зображенням, перш ніж намагатися встановити піктограму для кожного стану. Встановіть розмір піктограми таким, як розмір вашого зображення, або принаймні достатньо великим для вашого зображення, інакше він не відображатиметься.
ClearCrescendo

0

Просто використовуйте цей код

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

Зауважте, що: "path_to_icon"- шлях до піктограми зображення у файлі .qrcвашого проекту. Ви можете дізнатися, як додати .qrcфайл тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.