2012-02-14 342 views
1

因此,我在找到了這裏有一些東西,我想了解它是如何工作的。在Qt中製作倒數計時器

#ifndef LCDNUMBER_H 
#define LCDNUMBER_H 

#include <QLCDNumber> 
#include <QTimer> 
#include <QTime> 
#include <iostream> 

class lcdDisplay : public QLCDNumber 
{ 
    Q_OBJECT 

    public: 
     // The QTimer class provides repetitive and single-shot timers. 
     QTimer* objTimer; 
     // The QTime class provides clock time functions. 
     QTime* objTime; 

    public: 
     lcdDisplay (QWidget *parentWidget, int minutes, int seconds) 
     { 
      objTimer = new QTimer(); 
      // Setting our own time with the specified hours, minutes, and seconds. 
      objTime = new QTime (0, minutes, seconds); 

      setParent (parentWidget); 

      // connect (objectA, signalAFromObjectA, objectB, slotAFromObjectB) 
      // timeout(): This signal is emitted when the timer times out. The time out period can be specified with `start (int milliseconds)` function. 
      QObject :: connect (objTimer, SIGNAL (timeout()), this, SLOT (setDisplay())); 
     }; 

     ~ lcdDisplay() {}; 

    public slots: 
     // This slot is called after the timer timeouts (1 second). 
     void setDisplay() 
     { 
      std::cout << "\nf,gfd,mgnfdm,gnf,\n"; 
      // 
      objTime->setHMS (0, objTime->addSecs (-1).minute(), objTime->addSecs (-1).second()); 
      display (objTime->toString()); 
     }; 
}; 
#endif 

我希望瞭解這一行:objTime->setHMS (0, objTime->addSecs (-1).minute(), objTime->addSecs (-1).second());

這是如何降低分秒內部?
從這裏:http://doc.qt.nokia.com/4.7/qtime.html#addSecs

QTIME N(14,0,0); // n == 14:00:00
QTime t;
t = n.addSecs(70); // t == 14:01:10
t = n.addSecs(-70); // t == 13:58:50

addSecs函數可能會增加或減少秒。精細。但是這樣做objTime->addSecs (-1).minute(),

setHMS如何工作?

回答

1

此代碼示例本身沒有功能可以像秒錶一樣倒計時。它目前只是一個顯示當前時間值的示例。如果你想要讓它倒數,我建議增加一個QTimer到1秒超時的類。您將超時連接到一個插槽,該插槽將從您的顯示時間中減去一秒。當你啓動內部計時器時,它會每秒啓動一次。在您的插槽中,您可以在您的時鐘值達到零後停止計時器。

更新

您的新編輯的例子正是我在這裏描述這個最初的回答。定時器每秒觸發並調用一個調整時間對象的插槽

+0

已編輯該問題。 – 2012-02-14 07:36:45

3

如果您想要倒數計時器功能,請使用QTimer class

+1

不回答這個問題。 – 2017-06-14 05:19:37

1

objTime->addSecs(-1)不會更改objTime,但會返回比objTime小一秒的新QTime對象。 Then .minute()返回新QTime對象的小部分,.second()返回新QTime對象的第二部分。

如果代碼只預先計算一次新的時間,代碼可能會更有效。

還行可以改寫爲(但低於新的代碼考慮了時間太):

*objTime = objTime->addSecs(-1); // Thanks André Caron for the correction 

不使用setHMS()

+0

你可能是指'* objTime = objTime-> addSecs(-1);'。 – 2012-02-14 08:17:20