2

我正在寻找一个可以启动、停止并可以返回自开始以来经过的时间的时钟/计时器。是否有一个小部件可以完成所有这些事情?

谢谢

4

2 回答 2

4

您可以使用QTimeor QElapsedTimer,但它们不是s,因此如果您需要能够通过 Qt 信号启动和停止它们,则QObject需要将它们包装在一个类中。QObject

class Timer : public QObject {
    Q_OBJECT
public:
    explicit Timer(QObject *parent = 0): QObject(parent) {}    
public slots:
    void start() {
        time.start();
    }
    void stop() {
        emit elapsed(time.elapsed());
    }
signals:
    void elapsed(int msec);
private:
    QTime time;    
};
于 2012-08-10T12:54:09.380 回答
1

请看一下这个例子,以及QTimer类

//This class will inherit from QTimer
class Timer : public QTimer
{
    //We will count all the time, that passed in miliseconds
    long timePassed;

    Q_OBJECT

    public:

    explicit Timer(QObject *parent = 0) : QTimer(parent)
    {
        timePassed = 0;
        connect(this, SIGNAL(timeout()), this, SLOT(tick()));
    }
    private slots:

    //this slot will be connected with the Timers timeout() signal.
    //after you start the timer, the timeout signal will be fired every time,
    //when the amount interval() time passed.
    void tick()
    {
        timePassed+=interval(); //we increase the time passed
        qDebug()<<timePassed; //and debug our collected time
    }
};

在您的主应用程序中:

Timer * timer = new Timer(this);
timer->setInterval(1000);
timer->start();

这将创建一个 Timer 对象,将其间隔设置为 1 秒,然后启动它。您可以根据需要将任意数量的插槽连接到 timeout() 信号,也可以创建自定义信号。您可以通过以下方式停止计时器timer->stop();

我希望它有帮助!

于 2012-08-10T13:19:53.247 回答