可以停止并以qt为单位发出经过时间的计时器

可以停止并以qt为单位发出经过时间的计时器,qt,timer,clock,Qt,Timer,Clock,我正在寻找一个时钟/计时器,可以启动,停止,并可以返回自启动以来的elpsed时间。有没有一个小部件可以完成所有这些事情 Thx您可以使用or,但它们不是QObjects,因此如果需要通过Qt信号启动和停止它们,您需要将它们包装在QObject类中 class Timer : public QObject { Q_OBJECT public: explicit Timer(QObject *parent = 0): QObject(parent) {} public sl

我正在寻找一个时钟/计时器,可以启动,停止,并可以返回自启动以来的elpsed时间。有没有一个小部件可以完成所有这些事情

Thx

您可以使用or,但它们不是
QObject
s,因此如果需要通过Qt信号启动和停止它们,您需要将它们包装在
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;    
};

请看一下这个例子,同时也看一下课堂

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


我希望有帮助

我该怎么做?我是否需要创建一个新类来继承QefersedTimer并定义一个stop()函数?我将遵循“组合优先于继承”规则,并使QefersedTimer成为基于QObject的包装器的成员。如果你需要的话——我从你的问题中看不出有什么需要。对不起,我不明白你的意思。你能举一个例子说明我怎样才能用这种方式停止QefersedTimer吗?@Frank实际上,这些计时器不会停止:它们只存储开始时间,
appeased()
函数计算当前时间和存储时间之间的差。对我来说,这似乎比QTime/QefersedTimer方式更复杂,而且精确度也较低(不能保证在interval()之后调用计时器插槽-例如,如果另一个事件处理程序需要很长时间)。
//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();