QTimer activeChanged 信号

QTimer activeChanged signal

QTimer 的文档中有一个 Properties 部分,其中包含 active-属性。 这让我相信,可能有类似 activeChanged 信号的东西,我可以连接到。

恕我直言,原因不明

QObject::connect(m_timer, &QTimer::activeChanged, this, &MyObject::mySlot);

失败,说明 activeChanged 不是 QTimer 的成员。

基本上,我想做一些事情,当计时器最初启动(而不是重新启动)或最终停止时。当信号activeChanged不存在时,有没有人知道:


测试 main.cpp

QTimer* tim = new QTimer;
QObject::connect(tim, &QTimer::activeChanged, qApp, [tim](){qDebug() << "Active changed" << tim->isActive(); });
tim->start(40000); // I want to get a signal
tim->start(100);   // I don't want to get a signal
tim->stop();       // I want to get a signal

创建自己的定时器class并封装QTimer:

class Timer : public QObject
{
    Q_OBJECT
    QTimer m_timer;

public:
    Timer () 
    {
        connect(&m_timer, &QTimer::timeout, this, &Timer::timeout);
    }
    void start(int msec)
    {
        if (m_timer.isActive())
        {
            // Restart detected -> block signal
            m_timer.blockSignals(true);
            m_timer.start(msec);
            m_timer.blockSignals(false);
        }
        else
        {
            m_timer.start(msec);
        }
    }
}

由于 class Timer 拥有 QTimer 的完全控制权和知识,您可以有任何您想要的明显行为。