Qt 如何终止使用 startTimer() API 启动的计时器?

Xav*_*rey 1 c++ qt timer qtimer

完成后,我更新倒计时计时器,timerEvent(QTimerEvent *e)我调用了 ,killTimer(timerID)timerEvent()仍在调用中。那么杀死它的正确方法是什么?

编码:

void MainWindow::timerEvent(QTimerEvent *e)
{
    Q_UNUSED(e);

    static uint16_t u16RemTime = MAX_WARMUP_TIME_IN_SECS;
     if((true == isWarmUpStarted) && (u16RemTime > 0))
     {

         u16RemTime--;
         objptrSplashScreen->SetTime(u16RemTime);
     }
     else
     {
         //Still running
         qWarning("\n\n\n\n\n WARM UP TIMER RUNNING \n\n\n\n\n");
         killTimer(warmUpTimerID);
     }
}
Run Code Online (Sandbox Code Playgroud)

如果有帮助。我有两个这样的计时器在同一个 GUI 线程中的两个不同类中运行。我将如何去杀死它?

Ama*_*tel 5

timerEvent接收所有定时器的事件。为了区别它们,QTimerEvent类有int timerId() const方法。所以你的事件应该是这样的:

void MainWindow::timerEvent(QTimerEvent *e)
{
    if (e->timerId() != warmUpTimerID)
        return;

    static uint16_t u16RemTime = MAX_WARMUP_TIME_IN_SECS;
    if((true == isWarmUpStarted) && (u16RemTime > 0))
    {
        u16RemTime--;
        objptrSplashScreen->SetTime(u16RemTime);
    }
    else
    {
        //Still running
        qWarning("\n\n\n\n\n WARM UP TIMER RUNNING \n\n\n\n\n");
        killTimer(warmUpTimerID);
    }
}
Run Code Online (Sandbox Code Playgroud)