QPainter绘图,类似CDC::SetROP2(R2_XORPEN)的用法
时间: 2024-02-19 10:02:53 浏览: 35
在Qt中,可以使用QPainter的setCompositionMode()函数来实现类似CDC::SetROP2(R2_XORPEN)的效果。
具体来说,可以先设置画笔的颜色和宽度,然后调用setCompositionMode()函数设置为QPainter::CompositionMode_Xor,最后使用drawLine()等函数进行绘制。
示例代码如下:
```
QPainter painter(this);
painter.setPen(QPen(Qt::red, 2));
painter.setCompositionMode(QPainter::CompositionMode_Xor);
painter.drawLine(0, 0, 100, 100);
```
这段代码会在当前widget中绘制一条红色的线段,并且与之前绘制的内容进行异或运算,产生类似CDC::SetROP2(R2_XORPEN)的效果。
相关问题
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::CompositionMode_Xor用法
QPainter::CompositionMode_Xor是Qt中的一个图像混合模式,它将当前绘制的图形与已有图形进行异或运算,生成新的图形。
具体使用方法如下:
1. 在绘制图形前,使用QPainter的setCompositionMode函数设置混合模式为QPainter::CompositionMode_Xor。
2. 调用QPainter的绘图函数,绘制需要与已有图形进行异或运算的图形。
3. 绘制完成后,使用QPainter的setCompositionMode函数将混合模式设置回默认模式。
示例代码如下:
```
QPainter painter(this);
// 设置混合模式为Xor
painter.setCompositionMode(QPainter::CompositionMode_Xor);
// 绘制需要进行异或运算的图形
painter.drawRect(50, 50, 100, 100);
// 恢复默认混合模式
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
```
在上述代码中,绘制的矩形会与已有图形进行异或运算,生成新的图形。注意,在绘制完成后,一定要将混合模式设置回默认模式,以避免对后续绘图产生影响。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)