QPen pen; for(int c = 0;c<_penColors.size();++c) { if(_penColors.at(c)==1) pen.setColor(penColors.at(k++)); } p.setPen(pen); 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:41 浏览: 72
如果您希望在不改变之前的画笔颜色的情况下绘制新的图形,并根据 `_penColors` 中的值设置画笔颜色,可以将设置画笔颜色的部分放在绘制循环内。
以下是修改后的代码示例:
```cpp
for (int c = 0; c < _shape.size(); ++c) {
if (_shape.at(c) == 1) { // 线条
const QVector<QPoint>& line = _lines.at(i1++); // 取出一条线条
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
if (_penColors.at(k) == 1) {
tempPen.setColor(penColors.at(k++));
}
p.setPen(tempPen); // 将临时画笔应用于绘图对象
for (int j = 0; j < line.size() - 1; ++j) {
p.drawLine(line.at(j), line.at(j + 1));
}
} else if (_shape.at(c) == 2) { // 矩形
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
if (_penColors.at(k) == 1) {
tempPen.setColor(penColors.at(k++));
}
p.setPen(tempPen); // 将临时画笔应用于绘图对象
p.drawRect(_rects.at(i2++));
} else if (_shape.at(c) == 3) { // 椭圆
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
if (_penColors.at(k) == 1) {
tempPen.setColor(penColors.at(k++));
}
p.setPen(tempPen); // 将临时画笔应用于绘图对象
p.drawEllipse(_ellipse.at(i3++));
} else if (_shape.at(c) == 4) { // 直线
QPen tempPen = p.pen(); // 创建临时画笔,并设置为当前画笔的副本
if (_penColors.at(k) == 1) {
tempPen.setColor(penColors.at(k++));
}
p.setPen(tempPen); // 将临时画笔应用于绘图对象
p.drawLine(_line.at(i4).topLeft(), _line.at(i4).bottomRight());
i4++;
}
}
p.end();
p.begin(this); // 将当前窗体作为画布
p.drawPixmap(0, 0, pix); // 将 pixmap 画到窗体
```
在上述代码中,我们在绘制每个图形之前创建了一个临时的画笔 `tempPen`,并根据 `_penColors` 的值设置了临时画笔的颜色。然后,我们将临时画笔应用于绘图对象。这样,每个图形都可以根据需要设置不同的画笔颜色,而不会改变之前的画笔颜色。
请根据您的实际代码逻辑进行相应的修改。
阅读全文