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); }
這要畫完以後就不會出現以前所化內容消失的狀況了對象