如何使用QT每15秒调用一次函数

时间:2013-10-10 05:11:00

标签: c++ qt

我知道我的问题类似于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信号和插槽

2 个答案:

答案 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可能是更好的解决方案。