低级定时器之QBasicTimer
来源:互联网 发布:mac os vmware 镜像 编辑:程序博客网 时间:2024/06/09 13:45
QBasicTimers 是一个很快的、轻量级的定时器类,它主要被Qt内部使用。所以,我们一般不建议在上层应用程序中直接使用这个类去做定时器工作。在开发应用程序时,我们一般推荐使用QTimer类和QObject的成员函数startTimer来启动定时器。在此,只是出于学习还简单介绍一下QBasicTimer类的使用。还有,该定时器是一种重复性定时器,即它在启动后会不断的向应用程序发送定时器事件,直到你收到调用stop() 时才停止。
当然,这个类的使用也非常简单。一般我们只需要创建一个该类的对象,然后调用它的start() 方法即可。start()方法的具体声明如下:
void QBasicTimer::start(int msec, QObject *object)void QBasicTimer::start(int msec, Qt::TimerType timerType, QObject *obj)
其中,msec参数表示定时器的时间间隔,以毫秒为单位,object参数表示接受定时器到期事件的对象,timerType参数表示启动的定时器的类型。具体定义如下:
Qt::PreciseTimer 0 Precise timers try to keep millisecond accuracyQt::CoarseTimer 1 Coarse timers try to keep accuracy within 5% of the desired intervalQt::VeryCoarseTimer 2 Very coarse timers only keep full second accuracy
下面,我们在QtCreator中新建一个窗口程序,往窗口上托入一个列表控件QListWidget,然后,使用这个定时器,每秒向列表中添加一个字符串。步骤如下:
1.新建一个Qt Widget应用程序,命名为BasicTimer,选择QWidget作为我们窗口的基类。
2.双击widget.ui文件,进入Qt的设计模式,向窗口上拖一个QListWidget
3.回到编辑模式,在widget.h中添加一个QBasicTimer的对象,并重新QWidget类的timerEvent(QTimerEvent* event)虚函数。该函数就是用来响应定时器的timeout事件的。代码如下:
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QBasicTimer>#include <QTimerEvent>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();protected: void timerEvent(QTimerEvent *event);private: QBasicTimer timer;private: Ui::Widget *ui;};#endif // WIDGET_H
4.在widget.cpp 源文件中实现timerEvent() 函数即可。代码如下:
#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); timer.start(1000, Qt::PreciseTimer, this);}void Widget::timerEvent(QTimerEvent *event){ ui->listWidget->addItem("timeout");}Widget::~Widget(){ timer.stop(); delete ui;}
在此,我们在构造函数中,通过QBasicTimer的start() 函数,开启一个高精度的定时器,定时间隔为1秒,让当前窗口来接收定时器到期事件。在timerEvent() 中,我们简单的向窗口上的list控件中添加一个字符串。当程序退出,我们在窗口的析构函数中调用stop() 停止定时器。
5. 点击左下角的运行按钮,即可看到结果。每隔1秒,都会向list控件中添加一个字符串。如下:
- 低级定时器之QBasicTimer
- 低级定时器timer时间轮极端情况
- android 之低级错误
- QTimer和QBasicTimer使用
- swing低级应用之tree
- 别了j2me-->系统原理之低级api 与低级事件
- j2me 低级UI控件之文本域
- 我的低级程序员之路1
- Spring AOP之低级别支持
- 低级错误之遍历链表时删除节点
- 低级错误之 Unknown column 'XX in 'XXclause'
- JavaME UI设计之低级界面文本控件
- JavaMe 编程连载(1) - 低级界面绘图之点阵字
- JavaMe 编程连载(2) - 低级界面绘图之菜单
- Linux学习笔记之--低级(底层)文件库编程
- 脑残的低级错误之静态成员变量
- 如何创建Qt Plugins (插件)之 使用低级api
- 网页之定时器详解
- UVA 725 Divsion(暴力枚举)
- 在eclipse上使用maven创建ejb-helloworld项目
- JAVASE-----JAVA语言基础(个人知识点总结回顾)
- Linux工作管理与系统资源查看详解
- jquery库的一个表格排序插件
- 低级定时器之QBasicTimer
- 解决datetimepicker火狐浏览器兼容性问题
- 几部小说
- mybatis 异常信息 org.apache.ibatis.reflection.ReflectionException: There is no getter for property named
- JavaScript Data Types
- visio 2013安装到Office.zh_cn\officeMUI.mis officemui.xml
- linux 命令合集
- jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务
- Java温习——面向对象第四部分