Qobject类的定时器
QObject类提供了一个基本的定时器,通过函数startTimer()来启动,通过killTimer()来结束,通过QTimerEvent来处理定时器事件。
函数 | 功能 |
intstartTimer(int interval,Qt::TimerTypetimerType = Qt::CoarseTimer); | 启动一个时间间隔为interval毫秒的定时器,返回一个定时器标识符,如果未能启动成功,则返回0。 |
void killTimer(int id); | 通过定时器标识符来杀死定时器。 |
void timerEvent(QTimerEvent * event); | 定时器处理函数。 |
: | |
QTimerEvent常用的成员函数 | 功能 |
int QTimerEvent::timerld () const | 返回唯一的定时器标识符,和QObject:startTimer()返回的是同一个标识符。 |
这里我们实现了两个功能 一个是让标签计时 一个是移动标签
每过1s 计时加一秒 每过0.5s向右移动
我们利用QTimerEvent中的int QTimerEvent::timerld () const函数来区分开两个计时器
同时在 Widget 类中我们定义了两个int型的标记
函数实现
if(event->timerId()==nIdsLow)
{
static int count=0;
count++;
QString C=QString::number(count);
C=C+"秒";
ui->label->setText(C);
}
if(event->timerId()==nIdFast)
{
int x=ui->label->pos().x();
int y=ui->label->pos().y();
ui->label->move(x+20,y);
}
完整代码如下
#ifndef WIDGET_H
#define WIDGET_H
#include<QKeyEvent>
#include<QMouseEvent>
#include<QLabel>
#include <QPushButton>
#include <QWidget>
#include<QCloseEvent>
#include<QDebug>
#include<QObject>
#include<QTimerEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
int nIdFast;
int nIdsLow;
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
public:
void closeEvent(QCloseEvent*event);
public:
void keyPressEvent(QKeyEvent *event);
int key()const;
void mousePressEvent(QMouseEvent*event);
void timerEvent(QTimerEvent*event);
int timerld()const;
};
#endif // WIDGET_H
#include "widget.h"
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
QPushButton but(&w);
but.show();
w.show();
return a.exec();
}
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setText("close");
ui->label->setText("哈哈");
nIdFast= startTimer(500);
nIdsLow=startTimer(1000);
//QObject::connect(ui->pushButton,&pushbutton::clecked,this,Widget->close);
}
Widget::~Widget()
{
delete ui;
}
void Widget:: closeEvent(QCloseEvent*event)
{
qDebug()<<"close";
}
void Widget::keyPressEvent(QKeyEvent *event)
{
//ui->label->setText("呵呵");
switch(event->key ())
{
case Qt::Key_A:
ui->label->setText("A");
break;
case Qt::Key_B:
ui->label->setText("B");
break;
}
}
void Widget::mousePressEvent(QMouseEvent*event)
{
QString qst;
if(event->button()==Qt::LeftButton)
{
QString X=QString::number(event->QMouseEvent::globalX(),10);
QString Y=QString::number(event->QMouseEvent::globalY(),10);
qst=qst+X+","+Y;
ui->label->setText(qst);
}
else if(event->button()==Qt::RightButton)
{
QString X=QString::number(event->QMouseEvent::x(),10);
QString Y=QString::number(event->QMouseEvent::y(),10);
qst=qst+X+","+Y;
ui->label->setText(qst);
}
}
void Widget:: timerEvent(QTimerEvent*event)
{
if(event->timerId()==nIdsLow)
{
static int count=0;
count++;
QString C=QString::number(count);
C=C+"秒";
ui->label->setText(C);
}
if(event->timerId()==nIdFast)
{
int x=ui->label->pos().x();
int y=ui->label->pos().y();
ui->label->move(x+20,y);
}
}