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);

}

這要畫完以後就不會出現以前所化內容消失的狀況了對象

相關文章
相關標籤/搜索