Как вызвать функцию через каждые 15 секунд с помощью 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 секунд без использования быстрого и грязного метода установки boolean в true.

Есть ли способ реализовать это, используя QT-сигнал и слот с таймером или что-то в этом роде

Ответ 1

Метод showGPS() должен быть сделан слотом класса MyWidget. Затем, это просто вопрос использования класса QTimer.

 QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), myWidget, SLOT(showGPS()));
    timer->start(15000); //time specified in ms

Вышеуказанный код вызовет showGPS() каждые 15 секунд. Поскольку вызов является периодическим, вам не нужно устанавливать таймер в один режим съемки с помощью метода setSingleShot().

Edit:

Это простой 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();
}

Ответ 2

Хотя вы можете использовать QTimer для проверки изменений файлов, в вашем случае QFileWatcher может быть лучшим решением.