void MainWindow::moveAgvs_(){ timer =new QTimer(this); timer->start(1000); connect(timer, &QTimer::timeout, this, &MainWindow::moveAgvs); }, QTimer::singleShot(time, this, &, i, next_node, cur_x, cur_y, power_consumption, j, steps { float ratio = static_cast<float>(j) / steps; double new_x = cur_x + ratio * (next_node->x - cur_x); double new_y = cur_y + ratio * (next_node->y - cur_y); agvs[i].setCurrentX(new_x); agvs[i].setCurrentY(new_y); std:: cout <<"AGV"<<"("<< new_x << "," << new_y << ")" << endl; // 更新电量 agvs[i].setpower(agvs[i].power_ - power_consumption / steps); this->update(); // 在窗口中重绘 });,修改代碼為:第二个 QTimer 结束后再去运行第一个 QTimer
时间: 2024-02-21 10:56:32 浏览: 118
您可以在第二个 QTimer 的 timeout 信号中添加一个回调函数,用于启动第一个 QTimer。然后在第一个 QTimer 的 timeout 信号中进行操作。例如:
```
void MainWindow::moveAgvs_() {
timer1 = new QTimer(this);
timer2 = new QTimer(this);
timer2->start(5000); // 第二个 QTimer 每隔 5 秒触发一次
connect(timer2, &QTimer::timeout, this, &MainWindow::startFirstTimer);
}
void MainWindow::startFirstTimer() {
qDebug() << "Starting the first timer...";
timer1->start(1000); // 第一个 QTimer 每隔 1 秒触发一次
connect(timer1, &QTimer::timeout, this, &MainWindow::moveAgvs);
timer2->stop(); // 停止第二个 QTimer
}
void MainWindow::moveAgvs() {
// 在这里进行操作
}
```
在这个例子中,第二个 QTimer 每隔 5 秒触发一次,当它触发时调用 startFirstTimer 函数。startFirstTimer 函数会创建一个新的 QTimer(即第一个 QTimer),并在每隔 1 秒触发一次。同时,它会停止第二个 QTimer。当第一个 QTimer 触发时,会调用 moveAgvs 函数,执行您想要的操作。
阅读全文