2010-04-20 13 views
6

Ich habe Schwierigkeiten, ein Hintergrundbild für einen QPushButton zu erstellen. Bisher kein Erfolg. Folgendes ist mein Code.Hintergrundbild für QPushButton einstellen

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

Das Bild, das ich im Stylesheet verwende, befindet sich im selben Projektordner. Hat jemand eine Lösung?

Antwort

6

Sie haben das flache Attribut auf true setzen:

button1->setFlat(true);

Sie müssen auch die autofillbackground Set -

button1->setAutoFillBackground(true);

Sie möchten bei QToolButton suchen, die ‚doesn t es muss flach sein, um ein Bild zu rendern. Ich bin mit ihnen in einer app, die ich im Moment bin zu schreiben und sie sehen sehr schön aus:

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

(Mein Bild wird als Ressource gespeichert)

+0

In dem obigen Code sollte ich Größe meines Bildes anpassen, um auf die Schaltfläche passen oder es wird automatisch erledigt werden? –

+1

Sie können in beide Richtungen gehen. Ursprünglich habe ich mein Bild extern auf 50x50 in einem Editor skaliert, aber dann entschied ich mich für 40x40 - 'setIconSize()' skaliert das Icon auf was auch immer Sie wollen. –

+0

Dies ist nicht korrekt, Sie müssen das Flat-Attribut oder den Autofill-Hintergrund nicht festlegen. Sie können das Bild einfach über 'setIcon (":/path/to/image.png ")' laden. Normalerweise lade ich das Bild zuerst in eine 'QPixmap', damit es als Malwerkzeug verwendet werden kann und die Pixmap dann an das Element übergeben kann, das sie benötigt. –

2

CSS-Selektor ist nicht korrekt.

Sie sollten so etwas wie tun:

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

Sie Pinsel als Palettenelement verwenden Hintergrund für jedes Widget zu füllen, für QPushButton das funktioniert, wenn die Taste flach ist.

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