QPoint start(agvs[i].current_x*25+200, (agvs[i].current_y+1)*25+50); QPoint end(next_node->x* 25 + 200, next_node->y* 25 + 50);,畫出Qpoint,start和end的矩形
时间: 2024-03-09 14:47:37 浏览: 50
如果您想在 `start` 和 `end` 两个点的位置上绘制矩形,可以使用 `painter.drawRect()` 方法。例如:
```
// 绘制 start 点位置上的矩形
painter.drawRect(QRect(start.x(), start.y(), nodeSize, nodeSize));
// 绘制 end 点位置上的矩形
painter.drawRect(QRect(end.x(), end.y(), nodeSize, nodeSize));
```
这将在 `start` 点和 `end` 点的位置上分别绘制一个 `nodeSize x nodeSize` 像素大小的矩形。如果您想更改矩形的颜色和填充方式,可以使用 `setPen()` 和 `setBrush()` 方法。例如,以下代码将设置矩形的填充颜色为红色:
```
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(Qt::red));
painter.drawRect(QRect(start.x(), start.y(), nodeSize, nodeSize));
```
这将绘制一个红色矩形,没有边框。同样,您需要在绘制完矩形后恢复画笔和画刷的默认值,以便后续绘图不受影响。
相关问题
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之内的點都變爲紅色
您可以使用以下代码将地图上所有在 `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` 所确定的矩形内,则将该点颜色设置为红色。请注意,这可能会导致一些障碍物也被涂成红色,因此您可能需要修改该代码以仅在地图上的可通行区域内绘制红色矩形。
//畫出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 的当前坐标的下面,那么就会向下画出连线。
阅读全文