//模擬小車行駛 for (int i = 0; i < agvs.size(); i++) { for (int j = 0; j < tasks.size(); j++) { if (tasks[j].id == agvs[i].get_task_id()) { completed_task_index = j; break; } } if (tasks[completed_task_index].completed == 2 ) { // 如果已经完成任务 paths[i].clear(); continue; // 跳过此次循环 } if (! paths[i].empty()) { int cur_x = agvs[i].getCurrentX(); int cur_y = agvs[i].getCurrentY(); Node*next_node = paths[i][0]; float speed = agvs[i].getSpeed(); float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2)); float time = distance / speed * 1000; // 计算电量的减少量 float power_consumption = distance /20; //MAP[cur_x][cur_y] = 1; //QTimer::singleShot(time, this, &, i, next_node, cur_x, cur_y, power_consumption { // 离开当前位置时将标记设为0 //MAP[cur_x][cur_y] = 0; agvs[i].setCurrentX(next_node->x); agvs[i].setCurrentY(next_node->y); // 更新电量 agvs[i].setpower(agvs[i].power- power_consumption); QPropertyAnimation animation = new QPropertyAnimation(agvs[i].animationTarget, "pos"); animation->setDuration(time); animation->setStartValue(QPoint(cur_x25+200-(17)/2, (cur_y+1)25+50-(17)/2)); animation->setEndValue(QPoint(next_node->x25+200-(17)/2, (next_node->y+1)*25+50-(17)/2)); animation->start(QAbstractAnimation::DeleteWhenStopped); connect(animation, &QPropertyAnimation::finished, this, i, next_node, power_consumption { //MAP[next_node->x][next_node->y] = 1; this->update(); // 在窗口中重绘 }); paths[i].erase(paths[i].begin()); } },爲什麽畫面無法運行
时间: 2024-02-17 16:01:57 浏览: 51
AGVS.rar_AGVS调度_gulf5j4_scheduling AGV_wpf agv调度系统_调度控制
5星 · 资源好评率100%
这段代码中存在一些问题,导致画面无法运行。以下是可能的问题:
1. 计算完成任务的索引时,应该在内层循环之前将completed_task_index初始化为-1,否则可能出现使用未初始化的变量的情况。
2. 在判断任务是否已经完成时,应该使用tasks[completed_task_index]而非tasks[j],因为completed_task_index记录的是已经完成的任务的索引。
3. 在更新AGV的位置时,应该在QPropertyAnimation的finished信号中进行,而不是在QTimer::singleShot函数中进行,因为QPropertyAnimation是异步执行的,可能导致位置更新不及时。
4. 在连接QPropertyAnimation的finished信号时,应该使用lambda表达式来传递额外的参数,如下所示:
```
connect(animation, &QPropertyAnimation::finished, [=]() {
agvs[i].setCurrentX(next_node->x);
agvs[i].setCurrentY(next_node->y);
agvs[i].setpower(agvs[i].power - power_consumption);
// 在窗口中重绘
this->update();
// 更新地图标记
//MAP[next_node->x][next_node->y] = 1;
});
```
5. 在调用QPropertyAnimation的start函数时,应该使用指针而非对象,如下所示:
```
QPropertyAnimation *animation = new QPropertyAnimation(agvs[i].animationTarget, "pos");
animation->setDuration(time);
animation->setStartValue(QPoint((cur_x+1)*25+200-(17)/2, (cur_y+1)*25+50-(17)/2));
animation->setEndValue(QPoint((next_node->x+1)*25+200-(17)/2, (next_node->y+1)*25+50-(17)/2));
animation->start(QAbstractAnimation::DeleteWhenStopped);
```
你可以尝试修改以上问题,并重新运行代码来解决问题。
阅读全文