QT 计时器 学习笔记

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
#include
#include
#include 
#include 
#include
#include
#include
#include
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 

#include 
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);

    }



}



你可能感兴趣的:(qt,学习,ui)