// 得到agv的路綫 for (int i = 0; i < agvs.size(); i++) { if (agvs[i].getLoad() == true) { // 如果是负载的状态 if (agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()) { // 如果到达终点 agvs[i].setLoad(false); // 设置为空载状态 agvs[i].setState(true); std::cout << "agv__id :" << agvs[i].getid() << " ,agv_get_task_id :" << agvs[i].get_task_id() << endl; for (int j = 0; j < tasks.size(); j++) { if (tasks[j].id == agvs[i].get_task_id()) { completed_task_index = j; break; } } if (completed_task_index != -1) { tasks[completed_task_index].completed = 2; } task_to_agv(); // 更新任务分配 update(); // 更新AGV状态 } else { // 否则行驶到终点 Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path = astar.getPath(start_node, end_node1); path.erase(path.begin()); paths[i] = path; } } else { // 如果是空载的状态 if (agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) { // 如果到达起点 agvs[i].setLoad(true); // 设置为负载状态 } else { // 否则行驶到起点 Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); std::vector<Node*> path = astar.getPath(start_node, end_node); path.erase(path.begin()); paths[i] = path; } } }, if (! paths[i].empty()) { // 检查 paths 是否有数据 std:: cout << "wsn" << endl; painter.setPen(QPen(Qt::red, 5)); // 设置画笔颜色和宽度 for (int i = 0; i < paths.size(); i++) { // 遍历每个子数组 painter.setPen(QPen(Qt::red, 5)); // 设置画笔颜色和宽度 for (int j = 0; j < paths[i].size() - 1; j++) { // 遍历每个子数组中的点 QPoint start(paths[i][j]->x * 25 + 200, paths[i][j]->y * 25 + 50); QPoint end(paths[i][j + 1]->x * 25 + 200, paths[i][j + 1]->y * 25 + 50); painter.drawLine(start, end); } } },報錯:一運行畫出agv的行駛路綫就卡死就白屏卡死,怎麽修改
时间: 2024-01-20 20:03:58 浏览: 63
基于C++&Qt框架的分布式智能AGV调度系统.zip
看起来是在绘制 AGV 的行驶路线时出现了问题,导致程序卡死。你可以尝试以下几个修改:
1. 在绘制 AGV 行驶路线时,将循环变量 i 修改为另一个变量,以免与外层循环变量 i 冲突。
2. 在绘制 AGV 行驶路线时,应该先判断 paths[i] 是否为空,否则会出现访问空指针的错误。
3. 在绘制 AGV 行驶路线时,应该将 painter 的设置放在循环外面,以避免多次设置颜色和宽度。
4. 在绘制 AGV 行驶路线时,应该在绘制前先将画布清空,以避免重复绘制。
下面是修改后的代码示例:
```
if (!paths[i].empty()) {
QPainter painter(this);
painter.setPen(QPen(Qt::red, 5)); // 设置画笔颜色和宽度
for (int j = 0; j < paths[i].size() - 1; j++) { // 遍历每个子数组中的点
QPoint start(paths[i][j]->x * 25 + 200, paths[i][j]->y * 25 + 50);
QPoint end(paths[i][j + 1]->x * 25 + 200, paths[i][j + 1]->y * 25 + 50);
painter.drawLine(start, end);
}
}
```
阅读全文