Qt ------ QPainter 和控件組件的重繪


使用 QPainter 修改 QPaintDevice 的子類,如果 QPaintDevice 的子類也是 QWidget 的子類,比如自定義QWidget子類、QLabel等,需要把 QPainter 相關語句放入QWidget 子類的 void paintEvent(QPaintEvent *event); 事件函數中。QLabel 等官方 QWidget 子類就需要繼承QLabel ,然后重寫 void paintEvent(QPaintEvent *event); 函數,否則 Qt creator 會提示如下錯誤

QWidget::paintEngine: Should no longer be called

QPainter::begin: Paint device returned engine == 0, type: 1

QPainter::setBrush: Painter not active

 

 

舉例:

QPainter painter(hsv_selector_img);

hsv_selector_img 是 QImage 對象,QImage 不是 QWidget 子類,不用放入 void paintEvent(QPaintEvent *event); 函數中

 

 

QPainter painter(this);

QWidget 子類的對象都使用如上語句,需要放入 void paintEvent(QPaintEvent *event); 函數中

 

 

QPainter painter(ui->XXX);

以上語句都是錯誤,因為以上語句沒放入 void paintEvent(QPaintEvent *event); 函數中,即是放入也是放入 MainWindow 的函數,而不是 XXX 的函數中

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM