• 5622阅读
  • 1回复

派生QScrollView的控件在拖动滚动条时会擦除绘图,请教这个问题怎样解决啊? [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-15
已经在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);
}
一蓑烟雨任凭生
离线tiefeng
只看该作者 1楼 发表于: 2009-05-29
设置视图的更新模式为全部区域刷新。
view->setViewportUpdateMode ( QGraphicsView::FullViewportUpdate);
快速回复
限100 字节
 
上一个 下一个