[Qt-interest] How can I change a button's background?
Oliver Demetz
forenbeitraege at oliverdemetz.de
Fri Jun 19 11:53:57 CEST 2009
Hi!
You are trying to reimplemtent a feature which is already available out
of the box from the lib.
Have a look into StyleSheets, eg
button.setStyleSheet("background-image:url(./img.png);");
Regards,
Oliver
Kermit Mei schrieb:
> Hello community!
>
> How can I change a button's background?
>
> I know I can use styleSheet, but, my problem is that there're so many
> buttons, and every button's background may be change by the users at
> running time, and their background may not be the same. Also, I must
> remember the last background changed by user, and reload them at the
> next running time.
>
> How Can I do it? I what to use paintEvent() to do it, but when I repaint
> the background, I can't see any different effect when I press the
> buttons. My code is like this:
>
> //The Header file:
> #ifndef _REMOTEBUTTON_H
> #define _REMOTEBUTTON_H
>
> #include <QPushButton>
> #include <QString>
>
> class QPixmap;
>
> class RemoteButton : public QPushButton
> {
> Q_OBJECT
> public:
> RemoteButton(QWidget *parent = 0);
> ~RemoteButton();
>
> void setBackGround(const QString picFile);
>
> protected:
> void paintEvent(QPaintEvent *event);
> QPixmap *pixmap;
> };
>
> #endif //_REMOTEBUTTON_H
>
>
> //The source file:
> #include <QPen>
> #include <QPainter>
> #include <QLabel>
> #include <QPixmap>
>
> #include "RemoteButton.h"
>
> RemoteButton::RemoteButton(QWidget *parent)
> :QPushButton(parent),pixmap(0)
> {
> //Do Nothing Here!
> }
>
> RemoteButton::~RemoteButton() {
> if(pixmap != 0)
> delete pixmap;
> }
>
> void RemoteButton::setBackGround(const QString picFile) {
> if( pixmap != 0)
> delete pixmap;
> pixmap = new QPixmap(picFile);
> }
>
> void RemoteButton::paintEvent(QPaintEvent *event) {
> if(pixmap != 0) {
> QPainter painter(this);
> painter.drawPixmap(0,0,width(),height(),*pixmap);
> }else
> QPushButton::paintEvent(event);
> }
>
>
> //The test main.cpp file
> #include <QApplication>
> #include "RemoteButton.h"
>
> int main(int argc,char *argv[])
> {
> QApplication app(argc,argv);
> RemoteButton rBtn;
> rBtn.setBackGround("./bk.png");
> rBtn.show();
> return app.exec();
> }
>
>
> It can works, but I can't see and different effects when I press it.
>
> Hope your help.
> Thanks:)
>
> Kermit
More information about the Qt-interest-old
mailing list