已经在paintEvent( QPaintEvent *)中设置了setWFlags(getWFlags() | Qt::WRepaintNoErase); 为什么不起作用呢?代码如下:
//drawview.h 控件DrawView 是QScrollView的viewport中的控件
class DrawView : public QWidget
{
public:
DrawView(QWidget* parent,const char* name);
void drawIt(int y, int s, bool err);
protected:
void paintEvent( QPaintEvent * );
void drawLeft( QPainter *paint);
private:
int posHeight;
int fontSize;
bool isErr;
};
//drawview.cpp
DrawView::DrawView(QWidget* parent,const char* name)
:QWidget(parent,name)
{
setCaption( "DrawLeft Demo" );
setBackgroundMode(PaletteBase);
posHeight=10;
fontSize=10;
isErr=1;
resize( 40,6000 );
}
void DrawView::drawIt(int y, int s, bool err)
{
posHeight=y;
fontSize=s;
isErr=err;
update();
}
void DrawView::paintEvent( QPaintEvent *)
{
setWFlags(getWFlags() | Qt::WRepaintNoErase); //ÖØ»²»²Á³ý
QPainter p( this);
drawLeft( &p);
}
void DrawView::drawLeft( QPainter *p)
{
static const char *fontFamily ="Helvetica";
QFont font( fontFamily, fontSize );
p->setFont( font );
p->setPen( QColor(255,0,0) ); // solid fill with color c
if(isErr==1)
p->drawText( 2, posHeight, "X" );
else
p->drawText( 2, posHeight, " " );
}
//scrollview.h
class ScrollView : public QScrollView
{
public:
ScrollView(QWidget* parent,const char* name);
void drawX(int y, int s, bool err);
private:
DrawView *drawArea;
};
//scrollview.cpp
ScrollView::ScrollView(QWidget* parent,const char* name)
: QScrollView(parent,name,0)
{
drawArea = new DrawView(this,"drawArea");
drawArea->setFixedSize(40,6000);
drawArea->setBackgroundColor(QColor(216,216,216));
this->addChild(drawArea);
setVScrollBarMode(QScrollView::Auto);
setHScrollBarMode(QScrollView::AlwaysOff);
this->verticalScrollBar()->hide();
}
void ScrollView::drawX(int y, int s, bool err)
{
drawArea->drawIt(y, s, err);
}