首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTimer activeChanged信号

QTimer activeChanged信号
EN

Stack Overflow用户
提问于 2017-11-06 16:37:37
回答 1查看 106关注 0票数 0

Properties-section,的文档中,有一个包含active-property的active。这让我相信,可能有类似于activeChanged-signal的东西,我可以连接到。

由于IMHO不明显的原因

代码语言:javascript
复制
QObject::connect(m_timer, &QTimer::activeChanged, this, &MyObject::mySlot);

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

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

  • 为什么它是一个财产呢?
  • 如果有其他信号要连接,做这件事?
  • 有什么方法可以在计时器启动或停止时连接起来,并做些什么呢?

试验在main.cpp中的应用

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-06 17:14:33

创建自己的timer类并封装QTimer:

代码语言:javascript
复制
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的全部控制和知识,所以您可以有任何明显的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47141688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档