//------------------------icon.h------------------------------------
#ifndef ICON_H
#define ICON_H
#include <qiconview.h>
#include <qpixmap.h>
#include <qcolor.h>
#include <qpainter.h>
class myIcon : public QIconView
{
Q_OBJECT
public:
myIcon( QWidget* parent = 0,const char* name=0,QRect &r,QPixmap &pix);
~myIcon();
void drawBackground(QPainter *p,const QRect &r);
QRect myrect;
QPixmap mypix;
};
#endif
---------------------------icon.cpp--------------------------------------------
#include "icon.h"
myIcon::myIcon( QWidget* parent,const char* name,QRect &rect,QPixmap &pixmap)
: QIconView( parent, name)
{
myrect = rect;
mypix=pixmap; //这里是方便在引用时更换背景
}
myIcon::~myIcon(){}
//在这里写入自己的代码就可以啦
void myIcon::drawBackground(QPainter *p,const QRect &r)
{
p->fillRect(myrect, QBrush(QColor(0,0,0),mypix);
}
//--------------------main.cpp----------------------------
......
QPixmap p("background.png");
myIconView *iconview = new myIconView(this,"myicon",QRect(0,0,300,200),p);
原来的drawBackground不起作用的原因是画图标的painter和画背景的painter发生冲突,如果慢速启动的话就会发现先会出现背景,然后背景被QIconView的base色所替代,然后才在base上画图标.
这种继承的方法是使得两个painter的工作时间错开,在new时背景已经画好了.