for(int c = 0;c<_shape.size();++c)//控制用户当前所绘图形总数 { if(_shape.at(c) == 1)//线条 { const QVector<QPoint>& line = _lines.at(i1++);//取出一条线条 for(int j=0; j<line.size()-1; ++j)//将线条的所有线段描绘出 { p.drawLine(line.at(j), line.at(j+1)); } } else if(_shape.at(c) == 2)//矩形 { p.drawRect(_rects.at(i2++)); } else if(_shape.at(c) == 3)//椭圆 { p.drawEllipse(_ellipse.at(i3++)); } else if(_shape.at(c) == 4)//直线 { p.drawLine(_line.at(i4).topLeft(),_line.at(i4).bottomRight()); i4++; } } p.end(); p.begin(this);//将当前窗体作为画布 p.drawPixmap(0,0, pix);//将pixmap画到窗体
时间: 2024-04-12 14:31:39 浏览: 82
要在不改变之前的画笔颜色的情况下绘制新的图形,您可以在绘制每个图形之前保存原始的画笔并恢复它。
以下是修正后的代码示例:
```cpp
QPen originalPen = p.pen(); // 保存原始的画笔
for (int c = 0; c < _shape.size(); ++c) {
if (_shape.at(c) == 1) { // 线条
const QVector<QPoint>& line = _lines.at(i1++); // 取出一条线条
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
p.setPen(tempPen); // 将临时画笔应用于绘图对象
for (int j = 0; j < line.size() - 1; ++j) {
p.drawLine(line.at(j), line.at(j + 1));
}
p.setPen(originalPen); // 恢复原始画笔
} else if (_shape.at(c) == 2) { // 矩形
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
p.setPen(tempPen); // 将临时画笔应用于绘图对象
p.drawRect(_rects.at(i2++));
p.setPen(originalPen); // 恢复原始画笔
} else if (_shape.at(c) == 3) { // 椭圆
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
p.setPen(tempPen); // 将临时画笔应用于绘图对象
p.drawEllipse(_ellipse.at(i3++));
p.setPen(originalPen); // 恢复原始画笔
} else if (_shape.at(c) == 4) { // 直线
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
p.setPen(tempPen); // 将临时画笔应用于绘图对象
p.drawLine(_line.at(i4).topLeft(), _line.at(i4).bottomRight());
i4++;
p.setPen(originalPen); // 恢复原始画笔
}
}
p.end();
p.begin(this); // 将当前窗体作为画布
p.drawPixmap(0, 0, pix); // 将pixmap画到窗体
```
在上述代码中,我们在绘制每个图形之前保存了原始的画笔对象,并在绘制之后恢复了原始的画笔。这样,在绘制每个图形时,都会使用原始的画笔颜色,不会受到新的画笔颜色的影响。
请根据您的实际代码逻辑进行相应的修改。
阅读全文