导航:首页 > 源码编译 > qt源码分析qtimer

qt源码分析qtimer

发布时间:2023-08-14 22:11:41

㈠ Qt中定时器的两种使用方法(QObject类与QTimer类)

Qt中定时器用于间隔一段时间执行一次操作,循环执慎汪行,直至定哪拍时器停止或被杀死。有两种使用方法, QObject类 与 QTimer类 。个人比较习惯使用QTimer类,信号与槽方式比较简洁灵活。

方法一:QObject中的定时器的使用,需要用到三个函数

1、int QObject::startTimer ( int interval ) ; //开启定时器,执行周期为interval毫秒。

此函数开启成功后,返回这个定时器的ID,并每隔interval毫秒时间进入一次timeEvent函数,直至定时器停止或被杀死。

2、void QObject::timeEvent ( QTimerEvent *event ) ; //需重写timeEvent函数,相关操作在此函数中执行。

当定时器超时后会进入此函数,可以通过event->timerId()来确定当前执行的宽缓仔定时器是哪个。

3、void QObject::killTimer ( int id );    //杀死目的id号的定时器,停止循环。

示例:

方法二:使用QTimer类(信号与槽)

1、创建QTimer类对象,

 QTimer *m_timer= new QTimer ( this ) ;

2、连接信号与槽,定时器超时后会发出 timeout () 信号,超时时执行槽函数 mySlot()

connect ( timer , SIGNAL ( timeout()) , this ,SLOT( mySlot()) );

3、开启定时器,周期为msec毫秒

timer->start( msec );

㈡ qt 的qtime定时器怎么选

可以用系统的timeEvent(QTimeEvent *e);

还可以用QTimer。

//方法一QTimer
QTimer*timer=newQTimer(this);
timer->乎桐start(1000);
connect(timer,SIGNAL(timeout()),this,SLOT(sltTimeout());

//方法二timeEvent
intm_nTimerId=startTimer(1000);

void磨备MainWidget::timerEvent(QTimerEvent*event)
{
if(event->timerId()==m_nTimerId){
dosomething();
瞎顷毁....
}
}

㈢ qt 要开启多个定时器

//背景时12个帕尔贴 不要12个温度去曲线,每一个类锋衡似下图:

该类在线程启动12定时器计时,银轮做并停止,第13个定时器 定时读取温度
//头文桐空件

class QThread;
class QTimer;

class ThreadTimer : public QObject
{
Q_OBJECT
public:
ThreadTimer();
~ThreadTimer();
public slots:
//index八连排索引, sec是秒 开启定时器
void StartTimer(int index, int sec );
void StartGetTem( int timeout );
void StopGetTem( );
private:
void GetTem();
signals:
void TimeOut(int index);
private:
virtual void timerEvent(QTimerEvent event);
private:
QTimer * m_pTimer;
QThread
m_pCurrThread;
int m_nTimer[MAX_REAGENT];
};

//源文件

ThreadTimer::ThreadTimer()
{
memset(m_nTimer,0,sizeof(m_nTimer));
m_pCurrThread = new QThread;
m_pTimer = new QTimer(this);
connect(m_pTimer, &QTimer::timeout, this, &ThreadTimer::GetTem);
this->moveToThread(m_pCurrThread);
m_pCurrThread->start();
}

ThreadTimer::~ThreadTimer()
{
if( nullptr != m_pCurrThread)
{
m_pCurrThread->quit();
m_pCurrThread->wait();
m_pCurrThread->deleteLater();
}
}

void ThreadTimer::StartTimer(int index, int timeout )
{
m_nTimer[index] = startTimer( timeout* 1000);
}

void ThreadTimer::StartGetTem( int timeout )
{
m_pTimer->start( timeout*1000 );
}

void ThreadTimer::StopGetTem( )
{
m_pTimer->stop();
}

//计时任务
void ThreadTimer::timerEvent(QTimerEvent *event)
{
int timerID = event->timerId();
for( int i=0;i< MAX_REAGENT;i++)
{
if( timerID == m_nTimer[i])
{
m_nTimer[i] = -1;
emit TimeOut(i);
break;
}
}
qDebug()<<"ThreadTimer::timerEvent "<<QThread::currentThreadId()<<" ";
killTimer( timerID );
}

//获取温度
void ThreadTimer::GetTem()
{

}

阅读全文

与qt源码分析qtimer相关的资料

热点内容
魔兽宏命令老是语言提示 浏览:971
办公文件夹大全 浏览:471
单片机闪烁灯虚拟线路图 浏览:72
App显示别的国家怎么更改 浏览:154
幻塔官方服务器叫什么 浏览:196
android自定义进度框 浏览:506
linux自动联网 浏览:492
keil编写的程序怎么不能编译呢 浏览:562
ipadair2能编程吗 浏览:358
esxi查看内存命令行 浏览:79
u盘settings文件夹 浏览:649
新东方雅思写作pdf 浏览:734
python中多个随机数的生成 浏览:119
服务器侦听端口是什么意思 浏览:320
手机通知音效文件夹 浏览:135
pdf产品目录 浏览:203
三菱fd编译通过不了 浏览:158
15g游戏下载完怎么解压 浏览:709
编译原理文法中的句型 浏览:756
出售广联达云翻样加密狗 浏览:278