2010-04-20 21 views
6

Tengo dificultades para establecer una imagen de fondo para un QPushButton. Sin éxito hasta ahora. El siguiente es mi código.Establecer imagen de fondo para 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())); 
} 

La imagen que estoy usando en la hoja de estilo se encuentra en la misma carpeta del proyecto. ¿Alguien tiene alguna solución?

Respuesta

6

usted tiene que establecer el atributo plana true:

button1->setFlat(true);

También tiene que establecer la autofillbackground -

button1->setAutoFillBackground(true);

Es posible que desee ver en QToolButton la que doesn' t requiere que sea plano para poder representar una imagen. Estoy usando en una aplicación que estoy escribiendo en este momento y se ven muy agradable:

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

(Mi imagen se almacena como un recurso)

+0

En el código anterior, ¿debo cambiar el tamaño de mi imagen para que se ajuste al botón o se ocupará de ello automáticamente? –

+1

Puede ir de cualquier manera. Originalmente cambié el tamaño de mi imagen a 50x50 externamente en un editor, pero luego decidí que quería 40x40 - 'setIconSize()' amplía el icono a lo que quieras. –

+0

Esto no es correcto, no tiene que establecer el atributo plano o el fondo de autocompletar. Simplemente puede cargar la imagen a través de 'setIcon (":/path/to/image.png ")'. Normalmente voy a cargar primero la imagen en un 'QPixmap' para que se pueda aprovechar como un dispositivo de pintura y luego pasar el Pixmap a cualquier elemento que lo necesite. –

2

Su selector CSS no es correcto.

Usted debe hacer algo como:

button1->setStyleSheet("QPushButton{ background-image: url(config.png); }"); 
1

Se puede utilizar como elemento de cepillo de paleta para llenar de fondo para cualquier tipo de artilugio, por QPushButton que funciona cuando el botón es plana.

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