QTimer activeChanged信号

时间:2017-11-06 16:37:38

标签: qt qt5 qtimer

QTimer 的文档中,有一个属性 -section,其中包含active - 属性。 这让我相信,可能会有activeChanged - 信号,我可以连接到。

对于恕我直言,不明原因

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

failes,声明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

1 个答案:

答案 0 :(得分:1)

创建自己的计时器类并封装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);
        }
    }
}

由于班级Timer拥有对QTimer的完全控制和知识,因此您可以拥有任何明显的行为。