欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Qt中如何在同一个类中共享使用一个Qtimer

Qt中如何在同一个类中共享使用一个Qtimer

2025/3/31 9:11:08 来源:https://blog.csdn.net/lsyrhz/article/details/146469144  浏览:    关键词:Qt中如何在同一个类中共享使用一个Qtimer

#创作灵感#

        当你在一个类中需要多个地方使用定时器,但是又不需要为每一个操作定义一个定时器变量。因为它们之间的行为是单一的。

         例如:某个程序需要播放警告声音,同一时间只能播放一个警告声音。一共有10种警告声音,需要根据优先级来播放。每次播放间隔时间根据需求来调整。这个时候有什么好的办法呢?

         在具体的需求实验中,经过不断调整,最终找到了一种共享定时器的方法。具体做法如下:

一、定义定时器:

class ShareTimer: public QObject {...
private:QTimer                         *m_playTimer;static QMetaObject::Connection m_connection;
};

二、使用定时器的地方:


QMetaObject::Connection ShareTimer::m_connection;void playAlarm1(const bool &isStop)
{if( isStop){m_playTimer->stop();if( m_connection ){disconnect(m_playTimer, &QTimer::timeout, this, nullptr);QObject::disconnect(m_connection);  // 断开连接}// 连接 QTimer 的 timeout 信号到一个 lambda 函数if( m_connection ){DEBUG<<"connection already success.....";}else{// 设置定时器每1000毫秒(即1秒)触发一次m_playTimer->setInterval(1000);//[捕获列表](参数列表) -> 返回类型 { 函数体 }m_connection = QObject::connect(m_playTimer, &QTimer::timeout, this ,  [this]() {if( g_AudioCtrl )g_AudioCtrl->playWavFile("DirectAlarmPriority",DirectAlarmPriority::D_BSD );DEBUG<<" playWavFile...............D_BSD.............. "<<"\n";});// 启动定时器m_playTimer->start();}}else{m_playTimer->stop();if( g_AudioCtrl )g_AudioCtrl->stopWavPlayer("DirectAlarmPriority",DirectAlarmPriority::D_BSD );if( m_connection ){disconnect(m_playTimer, &QTimer::timeout, this, nullptr);QObject::disconnect(m_connection);  // 断开连接}else{DEBUG<<"connection is disconnect.......";}m_is0x04PlayState = false;DEBUG<<" disconnect.............................connection = "<<m_connection;}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词