17

我知道我的问题与此问题类似,但我无法从那里找到解决方案。谁能简要回答我的问题?

我有这样的功能

void myWidget::showGPS()
{

/* This function will read data from text file
      that will continuouly change over time
           then process its data */

}

我想每 15-20 秒调用一次此函数,而不使用将 boolean 设置为 true 的 Quick-and-dirty 方法。

有没有办法使用 QT 信号和带有计时器的插槽或类似的东西来实现这一点

4

2 回答 2

28

方法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();
}
于 2013-10-10T05:32:18.927 回答
4

虽然您可以使用 QTimer 检查文件更改,但在您的情况下 QFileWatcher 可能是更好的解决方案。

于 2013-10-10T09:44:02.327 回答