• 5523阅读
  • 3回复

请教:如何在需要的时候才重绘指定的绘图区域(已解决) [复制链接]

上一主题 下一主题
离线gavinyan
 
只看楼主 倒序阅读 楼主  发表于: 2008-04-15
— 本帖被 XChinux 执行加亮操作(2008-04-15) —
我现在是想在屏幕的(0,0,250,200)矩形区域不停的绘图,而在这个矩形外面的其它区域在需要的时候(例如有一个特定变量改变了)才被重新绘制,我试了用一个定时器来定时的调update(0,0,320,240),而绘图函数都在paintEvent( QPaintEvent *event ),程序如下:
refreshScrTimer = new QTimer( this, "refreshScrTimer");
  connect(refreshScrTimer, SIGNAL( timeout() ),this, SLOT( FlushBuf        ( ) ) );                                                                                                         
      refreshScrTimer->start(25);


void abcWidget::FlushBuf( )
{
    if(updateFlag==true)      update( 0, 0, 320, 240  );
   
    else      update( 0, 0, 250, 200  );
  }

void abcWidget::paintEvent( QPaintEvent *event )
{

  //画(0,0,250,200)矩形区域的代码
  //.......................


  //画其他区域的代码
    if(updateFlag==true)
    {
                    QPainter painter1(otherDispFrm);
      DrawOtherDispFrm(&painter1);
                   
                    updateFlag=false;

                    }
   

}

现在出现的问题是如果按照上面的程序其他区域没有显示出来(只画了一次),我希望花一次它后它就显示出来,而当updateFlag被置为true时重绘它,请问如何解决?谢谢!

[ 此贴被gavinyan在2008-04-16 18:57重新编辑 ]
离线cplus

只看该作者 1楼 发表于: 2008-04-15
是这样的,在paintEvent里面不应该只画你指定的区域,而应该按QPaintEvent *event 里面的区域来画,因为有些update是系统调用的,它的区域与你指定的不一样
离线gavinyan
只看该作者 2楼 发表于: 2008-04-15
在paintEvent里面我是第一次都画了,320*240大小,而以后每次是根据updateFlag是否为true来决定是否画其他区域,而( 0, 0, 250, 200  )区域是始终都画的.
      '而应该按QPaintEvent *event 里面的区域来画",我没有弄明白,请问如何确定QPaintEvent *event 里面的区域?谢谢!
离线gavinyan
只看该作者 3楼 发表于: 2008-04-15
我的程序里是获取了要更新的矩形,见程序:

//画(0,0,250,200)矩形区域的代码
  QRect rect= event->rect( );//获取要更新的矩形区域
    static QPixmap pixmap;
    pixmap.resize( rect.size( ) );
    pixmap.fill(waveformDispFrm, rect.topLeft( ) );
    QPainter painter( &pixmap, waveformDispFrm );
    painter.translate( -rect.x( ), -rect.y( ) );
  DrawCurves(&painter);
  //.......................
不知为什么还会出现我上面说到的那个问题?请高手解答,谢谢!
快速回复
限100 字节
 
上一个 下一个