【问题标题】:Making count down timer in Qt在 Qt 中制作倒数计时器
【发布时间】:2012-02-14 06:07:58
【问题描述】:

所以,我发现这里有一些工作,我想了解它是如何工作的。

#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-&gt;setHMS (0, objTime-&gt;addSecs (-1).minute (), objTime-&gt;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-&gt;addSecs (-1).minute (), 吗?

setHMS 是如何工作的?

【问题讨论】:

    标签: c++ qt timer clock


    【解决方案1】:

    如果您需要倒计时功能,请使用QTimer class

    【讨论】:

    • 没有回答问题。
    【解决方案2】:

    这个代码示例本身没有像秒表一样倒计时的功能。它目前只是一个显示当前时间值的示例。如果您想要让它倒计时,我建议您在类中添加一个 QTimer 并设置 1 秒超时。您将超时连接到一个插槽,该插槽将从您的显示时间中减去一秒。当您启动内部计时器时,它将每秒触发一次。在进行减法的插槽中,一旦时钟值达到零,您就可以停止计时器。

    更新

    您的新编辑示例正是我在此初始答案中所描述的内容。计时器每秒触发一次,并调用一个调整时间对象的槽

    【讨论】:

      【解决方案3】:

      objTime-&gt;addSecs(-1) 不会改变 objTime 而是返回一个比 objTime 少一秒的新 QTime 对象。 然后.minute() 返回新 QTime 对象的分钟部分,.second() 返回新 QTime 对象的第二部分。

      如果代码只预先计算一次新时间,效率会更高。

      该行也可以重写为(但下面的新代码也考虑了时间):

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

      不使用setHMS()

      【讨论】:

      • 你的意思可能是*objTime = objTime-&gt;addSecs(-1);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多