QPainter::setBrush: Painter not active
时间: 2023-12-11 08:56:53 浏览: 17
这个错误通常出现在使用QPainter绘图时,没有先开始绘图或者绘图过程中被中断了。你需要在绘图前先使用QPainter的begin()函数开始绘图,绘图完成后使用end()函数结束绘图,例如:
```
QPainter painter(this);
painter.begin(this);
// 进行绘图操作
painter.end();
```
另外,如果你在绘图过程中使用了多个QPainter对象,需要确保每个QPainter对象都使用begin()和end()函数开始和结束绘图,而不能共享一个QPainter对象。
相关问题
QPainter::translate: Painter not active QPainter::rotate: Painter not active
这个错误通常发生在没有开始绘制之前调用了QPainter的绘图函数。请确保您已经调用了begin()函数来开始绘制,例如:
```
QPainter painter(this); // this为绘制的目标设备,例如QWidget或QPixmap
painter.begin(this); // 开始绘制
// 绘制代码,例如:
painter.drawPixmap(agvs[i].current_x*25+200-(agv_size-nodeSize)/2,(agvs[i].current_y+1)*25+50-(agv_size-nodeSize)/2,agv_size,agv_size,QPixmap(":/new/prefix1/agv1.png").scaled(25,25));
painter.translate(agvs[i].current_x*25+200, (agvs[i].current_y+1)*25+50);
painter.rotate(agvs[i].angle_);
painter.drawPixmap(-agv_size/2, -agv_size/2, agv_size, agv_size, agvPixmap.scaled(25, 25).transformed(QTransform().rotate(agvs[i].angle_)));
painter.end(); // 结束绘制
```
这里我们使用QPainter的begin()函数开始绘制,然后在绘制代码中调用translate()和rotate()函数。最后,我们使用end()函数结束绘制。
QPainter::setPen: Painter not active
这个问题通常是由于在调用QPainter的setPen函数之前没有正确地调用begin函数,或者在调用begin函数之后,未调用end函数之前尝试调用setPen函数引起的。
QPainter是在绘制之前必须调用begin函数来启动绘图操作,并在绘制完成后调用end函数来结束绘图操作。如果你尝试在没有调用begin函数或在end函数之前调用setPen函数,就会出现"Painter not active"错误。
要解决这个问题,你应该确保在调用setPen函数之前已经调用了begin函数,并且在绘制完成后调用了end函数。另外,你也可以检查QPainter对象的状态,确保它是活动的状态,才能调用setPen函数。例如:
```
QPainter painter(this);
if (painter.isActive()) {
painter.setPen(Qt::red);
}
```
这样可以避免出现"Painter not active"错误。