QPoint start(agvs[i].current_x*25+200+nodeSize/2, (agvs[i].current_y+1)*25+50+nodeSize/2); if (agvs[i].current_x == next_node->x && next_node->y > agvs[i].current_y)//向下 { QPoint end(next_node->x* 25 + 200 +nodeSize/2, (agvs[i].current_y+1)*25+50+nodeSize/20+16); painter.drawLine(start, end); }, // 畫出地圖 for(int i=0;i<31;i++) for(int j=0;j<31;j++) { switch(_MAP[i][j]) { case 1://画障礙物 painter.setBrush(QBrush(Qt::black,Qt::SolidPattern)); painter.drawRect(QRect((i*25+200),(j+1)*25+50,nodeSize,nodeSize)); break; case 0://画地圖 painter.setPen(QColor(66, 139, 230)); // 设置线条颜色 painter.setBrush(QBrush(QColor(66, 139, 230),Qt::SolidPattern)); painter.drawRect(QRect((i*25+200),(j+1)*25+50,nodeSize,nodeSize));,將地圖上,Qpoint之内的點都變爲紅色
时间: 2024-02-14 07:10:20 浏览: 63
您可以使用以下代码将地图上所有在 `QPoint` 内的点变为红色:
```
QRect rect(start, end); // 创建一个包含起点和终点的矩形
for(int i=0;i<31;i++) {
for(int j=0;j<31;j++) {
QPoint point(i*25+200+nodeSize/2, (j+1)*25+50+nodeSize/2);
if(rect.contains(point)) { // 如果点在矩形内
painter.setPen(QColor(Qt::red)); // 设置线条颜色为红色
painter.setBrush(QBrush(Qt::red, Qt::SolidPattern)); // 设置笔刷颜色为红色
painter.drawRect(QRect((i*25+200),(j+1)*25+50,nodeSize,nodeSize)); // 画一个矩形,颜色为红色
}
}
}
```
这会遍历地图上的所有点,如果该点在 `QPoint` 所确定的矩形内,则将该点颜色设置为红色。请注意,这可能会导致一些障碍物也被涂成红色,因此您可能需要修改该代码以仅在地图上的可通行区域内绘制红色矩形。
相关问题
QPoint start(agvs[i].current_x*25+200+nodeSize/2, (agvs[i].current_y+1)25+50+nodeSize/2); if (agvs[i].current_x == next_node->x && next_node->y > agvs[i].current_y)//向下 { QPoint end(next_node->x 25 + 200 +nodeSize/2, (agvs[i].current_y+1)25+50+nodeSize/20+16); painter.drawLine(start, end); }, // 畫出地圖 for(int i=0;i<31;i++) for(int j=0;j<31;j++) { switch(_MAP[i][j]) { case 1://画障礙物 painter.setBrush(QBrush(Qt::black,Qt::SolidPattern)); painter.drawRect(QRect((i25+200),(j+1)25+50,nodeSize,nodeSize)); break; case 0://画地圖 painter.setPen(QColor(66, 139, 230)); // 设置线条颜色 painter.setBrush(QBrush(QColor(66, 139, 230),Qt::SolidPattern)); painter.drawRect(QRect((i25+200),(j+1)*25+50,nodeSize,nodeSize));,將地圖上,drawline之内的坐標都變爲黑色
您可以通过在 `painter.drawLine()` 语句之前和之后添加以下语句来实现将该线段上的点变为黑色:
```
painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));
```
这将设置画笔的颜色为黑色,线宽为 1 像素,线型为实线,然后您可以调用 `painter.drawLine()` 来绘制该线段。这样,该线段上的所有点都将以黑色显示。同样,您需要在绘制完该线段后恢复画笔的默认值,以便后续绘图不受影响。您可以使用以下语句将画笔重置为默认值:
```
painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));
```
请注意,您需要确保在 `painter.drawLine()` 语句之前和之后都设置画笔的颜色,以便正确绘制该线段的颜色。
//畫出agv空間 for (int i = 0; i < agvs.size(); i++) { if (i < paths.size() && !paths[i].empty() ) { Node *next_node = paths[i][0]; QColor color(128, 138, 135); QPen pen(color, 14); painter.setPen(pen); QPoint start(agvs[i].current_x*25+200+nodeSize/2, (agvs[i].current_y+1)*25+50+nodeSize/2); QPoint end(next_node->x* 25 + 200 +nodeSize/2, (next_node->y+1)* 25 + 50 +nodeSize/2); painter.drawLine(start, end); }},修改爲會順澤下一個坐標的方向,根據agv的current坐標向前面加1
以下是修改后的代码:
```
//画出agv空间
for (int i = 0; i < agvs.size(); i++) {
if (i < paths.size() && !paths[i].empty()) {
Node *next_node = paths[i][0];
QColor color(128, 138, 135);
QPen pen(color, 14);
painter.setPen(pen);
QPoint start(agvs[i].current_x*25+200+nodeSize/2, (agvs[i].current_y+1)*25+50+nodeSize/2);
QPoint end;
if (agvs[i].current_x == next_node->x && next_node->y > agvs[i].current_y) {
end.setX(next_node->x*25+200+nodeSize/2);
end.setY((next_node->y+1)*25+50+nodeSize/2);
} else if (agvs[i].current_x == next_node->x && next_node->y < agvs[i].current_y) {
end.setX(next_node->x*25+200+nodeSize/2);
end.setY((next_node->y)*25+50+nodeSize/2);
} else if (agvs[i].current_y == next_node->y && next_node->x > agvs[i].current_x) {
end.setX((next_node->x)*25+200+nodeSize/2);
end.setY((next_node->y+1)*25+50+nodeSize/2);
} else if (agvs[i].current_y == next_node->y && next_node->x < agvs[i].current_x) {
end.setX((next_node->x+1)*25+200+nodeSize/2);
end.setY((next_node->y+1)*25+50+nodeSize/2);
}
painter.drawLine(start, end);
}
}
```
这个修改后的代码会根据 AGV 的 current 坐标向前面加1,来画出从当前坐标到下一个坐标的连线。如果下一个坐标在 AGV 的当前坐标的右边,那么就会向右画出连线;如果下一个坐标在 AGV 的当前坐标的左边,那么就会向左画出连线;如果下一个坐标在 AGV 的当前坐标的上面,那么就会向上画出连线;如果下一个坐标在 AGV 的当前坐标的下面,那么就会向下画出连线。
阅读全文