Qt定时器(QTimer)的3种使用方法
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 定时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论