Qt 定时器 (QTimer)的3种使用方法

Qt中定时器的使用有3种方法,

  • 使用QObject类提供的定时器
  • 使用QTimer类提供的定时器
  • 静态的singleShot ()函数创建单触发定时器

其中单次触发功能不推荐使用,就不做介绍了

方法一:使用QTimer定时器类(这种方法普遍使用)

示例代码:


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    tim = new QTimer();

    tim->setInterval(1000);

    connect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));

    tim->start();
}


void MainWindow::onTimeOut()
{
    static int value = 0;
    ui->progressBar->setValue(value++);

    if(value > 100)
        tim->stop();
}

QTimer类的简单介绍可以参考:QTimer类详细说明 - ADTL - 博客园 (cnblogs.com)

方法二:QObject中的定时器的使用,需要用到三个函数
1、 int QObject::startTimer ( int interval ) ;

这个是开启一个定时器的函数,他的参数interval是毫秒级别。当开启成功后会返回这个定时器的ID, 并且每隔interval 时间后会进入timerEvent 函数。直到定时器被杀死。

2、 void QObject::timerEvent ( QTimerEvent * event );

当定时器超时后,会进入该事件timerEvent函数,需要重写timerEvent函数,在函数中通过判断event->timerId()来确定定时器,然后执行某个定时器的超时函数。

3、 void QObject::killTimer ( int id );

通过从startTimer返回的ID传入killTimer 函数中杀死定时器,结束定时器进入超时处理。

代码:kilTimer杀死定时器后,必须再重新创建定时器才能启用定时器。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    timerid1 = startTimer(1000);
    timerid2 = startTimer(2000);
}


void MainWindow::timerEvent(QTimerEvent *e)
{
    if(e->timerId()==timerid1)
    {
        qDebug("timer1");
    }
    else if(e->timerId()==timerid2)
    {
        qDebug("timer2");
    }
}

void MainWindow::on_pushButton_clicked()
{
    killTimer(timerid1);
    timerid1 = 0;
}


void MainWindow::on_pushButton_2_clicked()
{
    timerid1 = startTimer(2000);
}

参考:QT定时器事件startTimer_qt starttimer-CSDN博客

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QT界面卡顿的解决方法有以下几: 1. 优化代码:检查代码是否存在耗时操作,例如循环遍历大量数据或者频繁地进行IO操作。如果有,可以考虑对代码进行优化,减少不必要的计算和IO。 2. 减少界面刷新次数:界面的卡顿往往是由于频繁地进行界面刷新引起的,可以通过减少刷新频率来提高界面的响应速度。可以通过使用Qt提供的定时器来控制界面刷新的频率。 3. 多线程处理耗时操作:将耗时的操作放在独立的线程中进行处理,避免阻塞主线程的执行。可以使用Qt提供的QThread类或者QtConcurrent库来实现多线程操作。 4. 异步操作:对于可能会阻塞界面的操作,可以通过使用信号与槽机制或者Qt提供的异步任务类(如QFuture、QPromise)来实现异步处理,将阻塞操作移出主线程。 5. 减少界面元素的数量和复杂度:复杂的界面元素(如大量的控件、复杂的布局等)会增加界面渲染的负担,可以考虑简化界面,减少不必要的控件和布局的复杂度。 6. 使用硬件加速:如果支持,可以利用硬件加速来提高界面的绘制速度。可以通过使用OpenGL来进行界面的绘制,或者使用Qt提供的QGraphicsView类来实现硬件加速。 总结来说,解决QT界面卡顿的关键是优化代码、减少界面刷新次数、合理使用多线程和异步操作、简化界面元素,并且利用硬件加速来提高界面的响应速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值