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

Posted

技术标签:

【中文标题】如何使用 QT 每 15 秒调用一次函数【英文标题】:How to call a function after every 15 seconds using QT 【发布时间】:2013-10-10 05:11:00 【问题描述】:

我知道我的问题与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 的 Quick-and-dirty 方法。

有没有什么方法可以使用 QT 信号和带有计时器或类似功能的插槽

【问题讨论】:

你还可以使用QTimer吗?只需将您的时间间隔设置为 15 秒?并通过“连接”将您的功能与计时器联系起来? (类似于您找到的链接。 示例在 QTimer 的文档中 【参考方案1】:

方法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();

【讨论】:

【参考方案2】:

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

【讨论】:

感谢您的建议。我会尝试使用。 根据文件的更新速率,您可能希望限制更新速率。反过来,这可能会再次涉及QTimer

以上是关于如何使用 QT 每 15 秒调用一次函数的主要内容,如果未能解决你的问题,请参考以下文章

如何每 x 秒调用一次方法?

qt中如何实现多线程?

qt中如何实现多线程?

即使App被IOS中的用户杀死,如何每10秒调用一次api?

Xamarin Forms:即使应用程序在后台,如何每 x 秒运行一次服务?

如何每 10 秒更改一次 iframe [关闭]