Настройка фонового изображения для QPushButton
Я изо всех сил пытаюсь установить фоновое изображение для 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 ответов
вы должны установить атрибут flat в true:
button1->setFlat(true);
вы также должны установить autofillbackground -
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);
(мое изображение хранится как ресурс)
ваш селектор css неверен.
вы должны сделать что-то вроде:
button1->setStyleSheet("QPushButton{ background-image: url(config.png); }");
вы можете использовать кисть в качестве элемента палитры для заполнения фона для любого виджета, для 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);