2012-02-14 346 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