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

 更新时间:2024年01月03日 09:45:44   作者:----云烟----  
本文主要介绍了Qt定时器(QTimer)的3种使用方法,主要包括QObject类提供的定时器,QTimer类提供的定时器,静态的singleShot ()函数创建单触发定时器,具有一定的参考价值,感兴趣的可以了解一下

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

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

方法一:静态的singleShot ()函数创建单触发定时器(不推荐)

singleShot函数是一个静态函数,表示只会在被调用时会执行一次操作。其中msec参数是时间,单位为ms,借助此函数可以简单实现一个定时器,定时为100s。

   QTimer::singleShot(1*1000,this, &MyWidget::function);
   void MyWidget::function()
{
    static int num=0;
    if(num < 100)
    {
        QTimer::singleShot(1*1000,this, &MyWidget::function);
        num += 1;
        ui->spinBox->setValue(num);
        qDebug()<<num;
    }
}

方法二:使用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成员函数:

QTimer::QTimer ( QObject * parent = 0, const char * name = 0 )
构造一个被称作name,父对象为parent的定时器。

QTimer::~QTimer ()
销毁这个定时器。

void QTimer::setInterval ( int msec )
设定定时间隔为msec毫秒。如果这个定时器信号是运行的,它将会被停止并且重新开始,否则它将会被开始。

bool QTimer::isActive () const
如果定时器正在运行,返回真,否则返回假。

void QTimer::singleShot ( int msec, QObject * receiver, const char * member ) [静态]
这个静态函数在一个给定时间间隔之后调用一个槽。

int QTimer::start ( int msec, bool sshot = FALSE )
开始一个msec毫秒定时的定时器。如果sshot为真,这个定时器将只会被激活一次,否则它将会持续到它被停止

void QTimer::stop ()
停止这个定时器。

void QTimer::timeout () [信号]
当定时器被激活时,这个信号被发射。

方法三: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 定时器(QTimer)的3种使用方法的文章就介绍到这了,更多相关Qt 定时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 详解VSCode下C++环境配置过程

    详解VSCode下C++环境配置过程

    这篇文章主要介绍了VSCode C++环境配置过程,在这大家需要在代码的目录下的.vscode文件夹下创建launch.json、tasks.json,具体实现过程跟随小编一起看看吧
    2021-11-11
  • 解析C++中四种强制类型转换的区别详解

    解析C++中四种强制类型转换的区别详解

    本篇文章是对C++中四种强制类型转换的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言sizeof和strlen的指针和数组面试题详解

    C语言sizeof和strlen的指针和数组面试题详解

    strlen是函数,字符串长度,不包括停止符。而sizeof则是内存块的大小,包括停止符。数组是一种数据类型,数据类型的本质就是固定大小,内存块的别名。可以用sizeof()一般都是数据类型
    2022-04-04
  • C++ Leetcode实现从英文中重建数字

    C++ Leetcode实现从英文中重建数字

    本文主要介绍了当给你一个字符串s,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)时,如何通过Leetcode按升序返回原始的数字。感兴趣的童鞋可以来看看
    2021-11-11
  • Qt使用QPainter绘制3D立方体

    Qt使用QPainter绘制3D立方体

    这篇文章主要为大家详细介绍了Qt使用QPainter绘制3D立方体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 浅谈c++中的异常处理机制

    浅谈c++中的异常处理机制

    C++异常处理机制通过try/catch/throw结构处理运行时错误,本文就来介绍一下c++中的异常处理机制,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • C++ 多线程编程建议之 C++ 对多线程/并发的支持(下)

    C++ 多线程编程建议之 C++ 对多线程/并发的支持(下)

    这篇文章主要介绍的是 C++ 多线程编程建议之 C++ 对多线程/并发的支持的相关资料,承接前文 现代 C++ 对多线程/并发的支持,接下来我们看看回发生什么吧
    2021-10-10
  • C语言与C++项目实现相互调用

    C语言与C++项目实现相互调用

    extern “c”的作用可以实现c语言和c++相互调用,本文就详细的介绍一下C语言与C++项目实现相互调用,感兴趣的可以了解一下
    2022-01-01
  • C++11中std::move、std::forward、左右值引用、移动构造函数的测试问题

    C++11中std::move、std::forward、左右值引用、移动构造函数的测试问题

    这篇文章主要介绍了C++11中std::move、std::forward、左右值引用、移动构造函数的测试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • C语言字符串数组详解

    C语言字符串数组详解

    这篇文章主要介绍了C语言字符串数组详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论