我想把定時器放入串口資料流里面,每次有新的資料來時,定時器會重新啟動,長時間沒有資料過來,定時器計時結束會呼叫槽函式。
F1timer=new QTimer;
F1timer->stop();
connect(F1timer,SIGNAL(timeout()),this,SLOT(F1timeout()));
F1timer->start(5*1000);
void QWidget::F1timeout()
{
F1->setValue(0);
//F1timer->stop();
// delete F1timer;
}
現在是當新的資料來時,定時器不會清零并重新計數。應該怎么修改?求大神幫助。
uj5u.com熱心網友回復:
再次呼叫start就行了uj5u.com熱心網友回復:
可以說詳細一點嗎?我試過了,不行。比如我現在設定的start值為5秒,如果1秒后有新的資料來,我希望QTimer可以重新開始計時,即重新開始5秒倒計時。uj5u.com熱心網友回復:
用一個全域Int變數,整除5(周期),余數為0時,運行處理函式。如果檢測到新資料,全域Int = 0uj5u.com熱心網友回復:
漏了一點,在計時器運行時,記得設定 全域Int++ ,保持增長uj5u.com熱心網友回復:
定時器不是5秒觸發一次嗎?你1秒來的時候計時器都沒有觸發呢。。。。
那你需要一個新的函式來處理計時器的問題吧?
換一種思路:如果定義計時器為1秒觸發一次,那么如果在計時處理函式中設定一個全域計數Int cout。
cout到5的時候,判斷一下是否有過資料接收。
int count =0;
void QWidget::F1timeout()
{
count++;
if(count==4)
//處理點什么
F1->setValue(0);
}
uj5u.com熱心網友回復:
先stop,再start就可以了!順便問下,你的需求是什么?感覺你這樣的處理很不合理!uj5u.com熱心網友回復:
是的 先stop掉 然后再start就可以了 我一般也是這樣做
uj5u.com熱心網友回復:
解決了我的一個問題,謝謝。不關閉的話,計時器總是出現問題。
uj5u.com熱心網友回復:
看助手:void QTimer::start(std::chrono::milliseconds msec)
This is an overloaded function.
Starts or restarts the timer with a timeout of duration msec milliseconds.
If the timer is already running, it will be stopped and restarted.
If singleShot is true, the timer will be activated only once.
呼叫start就可以了,“If the timer is already running, it will be stopped and restarted.”這句看到了嗎?
如果還有問題,可能是你其它地方有問題
uj5u.com熱心網友回復:
加個在有資料過來的時候,重新start轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/53218.html
標籤:Qt
上一篇:Android studio
