for (int i = 0; i < agvs.size(); i++) { //根據小車的狀態畫agv if (agvs[i].getLoad()){ painter.drawPixmap(agvs[i].getCurrentX()*25+200-(nodeSpacing-nodeSize)/2,(agvs[i].getCurrentY()+1)*25+50-(nodeSpacing-nodeSize)/2,25,25,QPixmap(":/new/prefix1/agvload.png").scaled(25,25)); } else { painter.drawPixmap(agvs[i].getCurrentX()*25+200-(nodeSpacing-nodeSize)/2,(agvs[i].getCurrentY()+1)*25+50-(nodeSpacing-nodeSize)/2,25,25,QPixmap(":/new/prefix1/agv1.png").scaled(25,25)); } // 画 AGV 的路径 if (!paths[i].empty()) { std::cout << "wsn" << endl; painter.setPen(QPen(Qt::red, 2)); for (int j = 0; j < paths[i].size() - 1; j++) { painter.drawLine(paths[i][j]->x, paths[i][j]->y, paths[i][j+1]->x, paths[i][j+1]->y); } } },一運行,画 AGV 的路径就卡死,怎麽修改
时间: 2023-11-28 08:48:18 浏览: 60
AGVS.rar_AGVS调度_gulf5j4_scheduling AGV_wpf agv调度系统_调度控制
5星 · 资源好评率100%
首先,你可以尝试在代码中加入调试信息,看看程序运行到哪里出了问题。
例如,你可以在 `for` 循环内部加入 `std::cout` 输出语句,输出每一个 `paths[i]` 的大小(即路径上所有节点的数量):
```
for (int i = 0; i < agvs.size(); i++) {
// ...
if (!paths[i].empty()) {
std::cout << "Path size: " << paths[i].size() << std::endl; // 调试信息
painter.setPen(QPen(Qt::red, 2));
for (int j = 0; j < paths[i].size() - 1; j++) {
painter.drawLine(paths[i][j]->x, paths[i][j]->y, paths[i][j+1]->x, paths[i][j+1]->y);
}
}
}
```
这样,当程序运行到画 AGV 路径的部分时,会输出每个 AGV 的路径长度,你可以根据输出信息来判断是否是路径为空或者长度为零导致程序卡死。
另外,你还可以在前面的代码中加入调试信息,检查 `agvs` 和 `paths` 的数据是否正确,例如:
```
std::cout << "AGV size: " << agvs.size() << std::endl;
std::cout << "Path size: " << paths.size() << std::endl;
```
注意,调试信息只是用来辅助定位问题的,最好不要在正式代码中保留这些输出语句。如果确定问题是由路径为空或长度为零导致的,可以在程序中加入判断语句,避免出现该问题:
```
for (int i = 0; i < agvs.size(); i++) {
// ...
if (!paths[i].empty() && paths[i].size() > 1) { // 判断路径是否为空或长度为零
painter.setPen(QPen(Qt::red, 2));
for (int j = 0; j < paths[i].size() - 1; j++) {
painter.drawLine(paths[i][j]->x, paths[i][j]->y, paths[i][j+1]->x, paths[i][j+1]->y);
}
}
}
```
阅读全文