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
的完全控制权和知识,您可以有任何您想要的明显行为。
在 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
的完全控制权和知识,您可以有任何您想要的明显行为。