我正在使用Qt/c++编写一款软件,通过串口与Arduino和其他电子设备进行通信。
我需要启动一个事件序列,以不同的时间调用不同的槽,就像这样:
- 启动电机1 20秒
- 在10秒后启动电机2
- 停止电机1
- 更改电机1速度
- 启动电机1 30秒
我尝试使用QTimer :: singleShot,但它仅适用于没有参数的插槽,并且我需要设置不同于时间的电机速度等参数。
现在我正在使用延迟函数,将当前时间与死亡时间进行比较,但是跟踪所有设备的定时非常复杂。
有什么最好的解决方案吗?建议?
StartMotor(1);
// Stop in 20 seconds
QTimer* p1 = new QTimer;
connect(p1, &QTimer::timeout, [=]{
StopMotor(1);
p1->deleteLater(); // clean up
});
p1->start(1000 * 20); // trigger in 20 seconds
// After 10 seconds, start motor 2
QTimer* p2 = new QTimer;
connect(p2, &QTimer::timeout, [=]{
StartMotor(2);
// And Stop Motor 1
StopMotor(1);
p2->deleteLater(); // clean up
});
p2->start(1000 * 10); // trigger in 10 seconds
...每个定时动作都是如此。
实现一个电机的类,例如:
class Motor:public QObject
{
Q_OBJECT
public slots:
void start();
void start(int ms); //this one starts QTimer::singleShot and calls stop
void stop();
};
QTimer
确实是最好的解决方案。你可以通过类的字段传递参数。 - Amartel