使用 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 的函數中