今天在写代码的时候用到QPainter在窗口中绘制一些图形,出现错误:QPainter::setPen: Painter not active。
百度上搜了也问了chatGPT没有很好的答案。无奈只好打开Qt API找问题。在Qt 文档中发现如下警告信息:
Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent().
上面这句话的意思是:QPainter
只能在 paintEvent()
函数内部或由 paintEvent()
函数调用的函数中使用,特别是当绘图设备是窗口小部件时。
也就是说QPainter只能在QWidget 部件的paintEvent事件函数中调用,或者在paintEvent函数调用的函数中调用。比如:自定义一个paintMyGraphics 方法你希望在paintMyGraphics中使用QPainter就必须在paintEvent函数中调用paintMyGraphics 。
下面是官方给出的示例代码:
void SimpleExampleWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 30));
painter.drawText(rect(), Qt::AlignCenter, "Qt");
}
如果不知道如何调用paintEvent函数可以手动调用QWidget::update()函数来触发paintEvent事件。