我知道我的问题类似于QUESTION,但我无法从那里找到解决方案。任何人都可以回答我的问题吗?
我有这样的功能
void myWidget::showGPS()
{
/* This function will read data from text file
that will continuouly change over time
then process its data */
}
我想每15-20秒调用一次这个函数,而不使用将布尔值设置为true的Quick-and-dirty方法。
有没有办法实现这个 带有定时器的QT信号和插槽
答案 0 :(得分:25)
方法showGPS()
应该成为MyWidget
类的一个插槽。
然后,它只是使用QTimer
类。
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), myWidget, SLOT(showGPS()));
timer->start(15000); //time specified in ms
以上代码每15秒调用一次showGPS()。
由于呼叫是周期性的,因此您无需使用setSingleShot()
方法在单触发模式下设置定时器。
编辑:
这是一个简单的poc,可以帮助你理解它..
#include <QApplication>
#include <QtGui>
#include <qobject.h>
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget()
{
timer = new QTimer(this);
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(showGPS()));
timer->start(1000); //time specified in ms
}
public slots:
void showGPS()
{
qDebug()<<Q_FUNC_INFO;
}
private:
QTimer *timer;
};
int main(int argc, char **args)
{
QApplication app(argc,args);
MyWidget myWidget;
return app.exec();
}
答案 1 :(得分:2)
虽然您可以使用QTimer检查文件更改,但在您的情况下,QFileWatcher可能是更好的解决方案。