Q定时器激活更改信号



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

出于IMHO不明确的原因

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

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

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

  • 为什么它是一处房产
  • 如果有其他信号要连接,该怎么办
  • 有没有办法在计时器启动或停止时挂上并做点什么

主.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

创建自己的计时器类并封装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的完全控制和知识,因此可以有任何明显的行为。

相关内容

  • 没有找到相关文章

最新更新