我用的qt环境是qt3.3.8,fadora8的系统。刚学习qt不久,遇到一个很郁闷的问题,请高手们解答。 
代码如下: 
#include <qapplication.h> 
#include <qlabel.h> 
#include <qlayout.h> 
#include <qpixmap.h> 
class MyButton : public QWidget 
{ 
public: 
MyButton( QWidget *parent=0, const char *name=0 ); 
protected: 
void paintEvent( QPaintEvent *); 
private: 
QLabel *label; 
}; 
MyButton::MyButton( QWidget *parent, const char *name ) 
: QWidget( parent, name ) 
{ 
label = new QLabel( "label", this, "label" ); 
QVBoxLayout *box = new QVBoxLayout(this); 
box->addWidget(label); 
} 
void MyButton::paintEvent( QPaintEvent *e) 
{ 
qDebug("BPixmapButtonBase::paintEvent"); 
} 
class MyWidget : public QWidget 
{ 
public: 
MyWidget( QWidget *parent=0, const char *name=0 ); 
}; 
MyWidget::MyWidget( QWidget *parent, const char *name ) 
: QWidget( parent, name ) 
{ 
MyButton *btn = new MyButton(this, "label" ); 
btn->repaint(); //还试过update();都没有效果 
} 
int main( int argc, char **argv ) 
{ 
QApplication a( argc, argv ); 
MyWidget w; 
w.resize(200, 120); 
QPixmap pix("images/ground1.png"); 
w.setPaletteBackgroundPixmap(pix); 
a.setMainWidget( &w ); 
w.show(); 
return a.exec(); 
} 
若去掉w.setPaletteBackgroundPixmap(pix);这句,或是换成w.setBackgroundPixmap(pix);则MyButton::paintEvent()不会被调用。到底有什么联系呢?好像跟palette有关,因为不想用setPaletteBackgroundPixmap()所以很想知道为什么。 
先谢了!