2010-04-20 10 views
6

Non riesco a impostare un'immagine di sfondo per un QPushButton. Nessun successo fino ad ora. Di seguito è riportato il mio codice.Impostazione dell'immagine di sfondo per 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())); 
} 

L'immagine che sto usando nel foglio di stile si trova nella stessa cartella del progetto. Qualcuno ha qualche soluzione?

risposta

6

è necessario impostare l'attributo piatta su true:

button1->setFlat(true);

È inoltre necessario impostare l'autofillbackground -

button1->setAutoFillBackground(true);

si consiglia di guardare QToolButton che doesn' t richiede che sia piatto per rendere un'immagine. Li sto utilizzando in un app che sto scrivendo in questo momento e sembrano molto bello:

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

(La mia immagine viene memorizzata come una risorsa)

+0

Nel codice di cui sopra devo ridimensionare la mia immagine per adattarla al pulsante o verrà gestita automaticamente? –

+1

Puoi andare in entrambi i modi. Inizialmente ho ridimensionato la mia immagine a 50x50 esternamente in un editor, ma poi ho deciso che volevo 40x40 - 'setIconSize() 'ridimensiona l'icona in base a ciò che vuoi. –

+0

Questo non è corretto, non è necessario impostare l'attributo piatto o lo sfondo di riempimento automatico. Puoi semplicemente caricare l'immagine tramite 'setIcon (":/path/to/image.png ")'. Di solito caricherò dapprima l'immagine in un 'QPixmap' in modo che possa essere sfruttata come un dispositivo di pittura e quindi passerà nella Pixmap a qualunque elemento ne abbia bisogno. –

2

tuo selettore CSS non è corretta.

Si dovrebbe fare qualcosa di simile:

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

È possibile utilizzare pennello come elemento di palette per riempire sfondo per qualsiasi widget per QPushButton che funziona quando il pulsante è piatta.

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