我正在为Raspberry PI创建UI应用程序,以在确定的超时(5秒)内从传感器读取数据。问题是QTimer超时插槽被多次调用
{ //at system init
readTempCur = new QTimer(this);
connect(readTempCur, SIGNAL(timeout()), this, SLOT(readSensor()));
readTempCur->start(SAMPLINGTIME);
readSensor(); //added to call on boot itself, can be removed
}
void HomePage::readSensor(void) {
readTempCur->stop();
qDebug() << "Read Sensor triggerred at " <<QDateTime::currentDateTime().toString();
//DO my actions
readTempCur->start(SAMPLINGTIME);
}
[答案编辑] 这种问题最可能的情况是将时隙连接到已经连接的信号上。它将在连接n次后触发插槽,因此设计时应注意不要再次连接。
答案 0 :(得分:1)
QTimer::start函数将启动/重新启动计时器。
您的readSensor
函数会停止计时器,然后重新启动。
删除start
进行修复。
void HomePage::readSensor(void) {
readTempCur->stop();
qDebug() << "Read Sensor triggerred at " <<QDateTime::currentDateTime().toString();
//DO my actions
//readTempCur->start(SAMPLINGTIME);
}
P.S。 如果您想一次运行计时器,则可以使用singleShoot
QTimer::singleShot(SAMPLINGTIME, this, SLOT(readSensor()));
答案 1 :(得分:0)
请勿停止或重新启动readSensor()
中的计时器。只要做:
void HomePage::readSensor(void)
{
qDebug() << "Read Sensor triggerred at " <<QDateTime::currentDateTime().toString();
//DO my actions
}
还要确保以毫秒为单位给出SAMPLINGTIME
。在5秒钟内,SAMPLINGTIME
应该为5000。