我用的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()所以很想知道为什么。
先谢了!