QpaintEvent事件函数重载问题(批注:如今看来以前的理解仍是太嫩了)

void Widget::paintEvent(QPaintEvent *)

{

if(mod=="rect")

{

QRect rect(pos1,pos2);

QPainter p(this);

p.drawRect(rect);

p.drawRoundRect(rect);

p.drawEllipse(rect);

}

}

当程序须要进行重绘的时候须要调用paintEvent这个函数,由上边的代码可知,程序每次调用paintEvent函数,都会将原先窗口的内容进行重绘(说白了就是清空了重画),致使原先的内容消失,为了解决这一问题,通过在网上的搜寻,我发现,其实能够这样:函数

1.创建一个QPixmap对象pix,在这个pix上进行绘制this

2.将要绘制内容绘制完后,将pix绘制到this这个窗口控件上来。code

void Widget::paintEvent(QPaintEvent *event)

{

QPainter painter; //建立一个QPainter对象

QPixmap pix(100, 100); //建立一个QPixmap对象

//在pix上进行画图

painter.begin(&pix);

painter.setPen(QPen(Qt::green, 3));

painter.setBrush(Qt::yellow);

painter.drawRect(10, 10, 60, 60);

 painter.end();

//将pix画到this上

painter.begin(this);

painter.drawPixmap(0,0,pix);

}

这要画完以后就不会出现以前所化内容消失的状况了对象

相关文章
相关标签/搜索