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); }
这要画完以后就不会出现以前所化内容消失的状况了对象