• 5848阅读
  • 0回复

qt-2.3.7中QIconView背景设置解决方法详解 [复制链接]

上一主题 下一主题
离线taomic
 

只看楼主 倒序阅读 楼主  发表于: 2008-08-26
— 本帖被 XChinux 执行加亮操作(2008-08-28) —
//------------------------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时背景已经画好了.
快速回复
限100 字节
 
上一个 下一个