Установка фонового изображения для QPushButton - PullRequest
6 голосов
/ 20 апреля 2010

Я изо всех сил пытаюсь установить фоновое изображение для QPushButton. Нет успеха до сих пор. Ниже приведен мой код.

appsWidget::appsWidget(QWidget *parent)
    :QWidget(parent)
{
    QPushButton *button1 = new QPushButton("SETTINGS",this);
    QPushButton *button2 = new QPushButton("TEST",this);
    QPushButton *button3 = new QPushButton("IE",this);

    button1->setStyleSheet("background-image:url(config.png)"); -> No success


    qDebug("appWidget initialized.");

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    this->setLayout(layout);
    connect(button1,SIGNAL(clicked()),this,SLOT(setClickIndex1()));
    connect(button2,SIGNAL(clicked()),this,SLOT(setClickIndex2()));
    connect(button3,SIGNAL(clicked()),this,SLOT(setClickIndex3()));
}

Изображение, которое я использую в таблице стилей, находится в той же папке проекта. У кого-нибудь есть решение?

Ответы [ 3 ]

6 голосов
/ 20 апреля 2010

Вы должны установить для атрибута flat значение true:

button1->setFlat(true);

Вы также должны установить фон автозаполнения -

button1->setAutoFillBackground(true);

Возможно, вы захотите взглянуть на QToolButton, который не требует, чтобы он был плоским для визуализации изображения. Я использую их в приложении, которое пишу в данный момент, и они выглядят очень красиво:

m_showAddCommentButton = new QToolButton();
m_showAddCommentButton->setAutoFillBackground(true);
palette = m_showAddCommentButton->palette();
palette.setColor(QPalette::Button,QColor(82,110,166));
m_showAddCommentButton->setPalette(palette);
m_showAddCommentButton->setIcon(QIcon(":/uiImages/addComment_50_50.jpg"));
m_showAddCommentButton->setIconSize(QSize(40,40));
m_showAddCommentButton->setToolTip("Comment");
connect(m_showAddCommentButton, SIGNAL(clicked()),
        manager, SLOT(showAddComment()));
hLayout->addWidget(m_showAddCommentButton,0);

(Мое изображение хранится как ресурс)

2 голосов
/ 06 марта 2012

Ваш css-селектор неверен.

Вы должны сделать что-то вроде:

button1->setStyleSheet("QPushButton{ background-image: url(config.png); }");
1 голос
/ 23 апреля 2012

Вы можете использовать кисть в качестве элемента палитры для заливки фона для любого виджета, для QPushButton, который работает, когда кнопка плоская.

QPixmap pixmap("image.jpg");
QPalette palette;    
QPushButton *button= new QPushButton(this);
palette.setBrush(button->backgroundRole(), QBrush(pixmap));

button->setFlat(true);
button->setAutoFillBackground(true);    
button->setPalette(palette);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...