#pragma once #include // 界面负责取得当前时间,模型只负责计算;测试可传入确定的毫秒数。 class Countdown { public: enum class State { Ready, Running, Paused, Finished }; explicit Countdown(qint64 durationMs = 300000); bool setDuration(qint64 durationMs); void start(qint64 nowMs); void pause(qint64 nowMs); void reset(); void update(qint64 nowMs); qint64 remaining(qint64 nowMs) const; qint64 duration() const { return m_duration; } State state() const { return m_state; } private: qint64 m_duration; qint64 m_remainingAtStart; qint64 m_segmentStarted = 0; State m_state = State::Ready; };