2013-10-10 11 views
11

Wiem, że moje pytanie jest podobne do tego QUESTION, ale nie mogę znaleźć rozwiązania z tego miejsca. Czy ktoś może dać breif odpowiedź na mój problem?Jak wywołać funkcję po każdych 15 sekundach używając QT

Mam funkcję jak ten

void myWidget::showGPS() 
{ 

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

} 

chcę wywołać tę funkcję co 15-20 sekund bez użycia Szybka i brzydka metoda ustawiania wartość logiczną true.

Czy istnieje jakiś sposób, aby realizować to, używając QT sygnał i gniazdo z zegarem czy coś takiego

+1

Nadal możesz używać QTimer? po prostu ustawić czas do 15 sekund? i połączyć swoją funkcję z zegarem przez "connect"? (podobne do znalezionego linku –

+0

Przykłady są na dokumentach dla QTimer –

Odpowiedz

17

Metoda showGPS(), powinny być wykonane gniazdo z MyWidget klasie. Później jest to tylko kwestia użycia klasy QTimer.

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

Powyższy kod wywoła showGPS(), co 15 sekund. Ponieważ połączenie jest okresowe, nie trzeba ustawiać licznika czasu w trybie jednego strzału przy użyciu metody setSingleShot().

Edit:

Jest to prosty poc, aby pomóc zrozumieć ..

#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(); 
} 
+0

Dziękuję bardzo, mój problem został rozwiązany przez twoje rozwiązanie – Bavani

2

Chociaż można używać do sprawdzania QTimer zmian w plikach, w przypadku QFileWatcher może być lepszym rozwiązaniem.

+0

Dziękuję za twoją sugestię Spróbuję użyć – Bavani

+0

W zależności od tempa aktualizacji plik, możesz chcieć oszacować limit aktualizacji, co z kolei prawdopodobnie będzie oznaczać ponownie 'QTimer'. –

Powiązane problemy