導航:首頁 > 源碼編譯 > 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相關的資料

熱點內容
分治演算法思想 瀏覽:148
s曲線加減速演算法 瀏覽:399
可編程序控制器原理及應用答案 瀏覽:454
小熊編程教程 瀏覽:908
word轉換成pdf轉換器免費下載 瀏覽:608
群體智能基本演算法 瀏覽:370
可編程軟體分為哪兩種 瀏覽:340
格林什麼app可以看 瀏覽:697
飛盧app仙俠熱賣推薦怎麼樣 瀏覽:722
飛秋上傳文件到共享文件夾 瀏覽:691
伺服器的共享文件夾如何訪問 瀏覽:232
復盛螺桿壓縮機講解 瀏覽:332
柱在基礎插筋需要加密嗎 瀏覽:80
51單片機中斷寄存器 瀏覽:65
壓縮文件後有病毒怎麼辦 瀏覽:618
蘋果ipad怎麼登安卓王者賬號 瀏覽:862
街頭足球伺服器已滿是什麼意思 瀏覽:462
androidspeex迴音消除 瀏覽:133
加密會議什麼意思 瀏覽:34
ubuntu命令行聯網 瀏覽:7