QPainter::CompositionMode_Xor用法
时间: 2024-02-07 16:04:10 浏览: 142
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);
```
在上述代码中,绘制的矩形会与已有图形进行异或运算,生成新的图形。注意,在绘制完成后,一定要将混合模式设置回默认模式,以避免对后续绘图产生影响。
相关问题
QString image = QString(":/prefix/image/%1.png").arg(GetImage(num)); QIcon icon = QIcon(image); // 加载图标 QPixmap pixmap = icon.pixmap(QSize(30, 30)); // 将图标转换为Pixmap对象 QPainter painter(&pixmap); painter.setCompositionMode(QPainter::CompositionMode_SourceIn); painter.fillRect(pixmap.rect(), QColor(192, 125, 5)); 这段代码去掉图标的大小
如果你想去掉对图标的大小设置,可以直接使用 `QIcon` 类创建图标对象,不需要再调用 `QPixmap` 的 `scaled()` 方法。以下是修改后的代码:
```cpp
QString image = QString(":/prefix/image/%1.png").arg(GetImage(num));
QIcon icon = QIcon(image); // 加载图标
QPixmap pixmap = icon.pixmap(QSize()); // 将图标转换为Pixmap对象
QPainter painter(&pixmap);
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
painter.fillRect(pixmap.rect(), QColor(192, 125, 5));
```
这里将 `QSize()` 作为参数传递给 `QIcon::pixmap()` 方法,表示不对图标大小进行限制,使用图标的原始大小。
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()函数结束绘制。
阅读全文