QT QTimer定时器

 

QT QTimer定时器

一、简述

       记--QTimer定时器的简单使用例子。

       例子1:链接: https://pan.baidu.com/s/1Om3-Tvsj8r8gapzOv2NbbQ 提取码: adx6 

       例子2:链接: https://pan.baidu.com/s/1GTNSlN6p8Q0eHDnrZiqJVg 提取码: faxa

二、例子1

          2.1  效果:

           

         2.2 工程结构

                 

                 布局:

                 

         2.3 源文件                 
               QTimerDemo.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QTimerDemo
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


               mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    QTimer *timer;//定时器
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_btnDownload_clicked();//按钮点击响应的槽函数
    void updateProgressValue();//更新进度条的值槽函数
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


               main.cpp文件

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}


               mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>//消息框

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    timer = new QTimer(this);//创建定时器
    timer->setInterval(1000);//设置间隔时间(每1000ms=1s,触发一个timeout()信号)
    connect(timer, SIGNAL(timeout()), this, SLOT(updateProgressValue()));

    ui->progressBar->setMinimum(0);//设置进度条的最小值为0
    ui->progressBar->setMaximum(100);//设置进度条的最大值为100
    ui->progressBar->setValue(0);//设置进度条的当前值
}

MainWindow::~MainWindow()
{
    delete timer;//销毁定时器
    delete ui;
}

void MainWindow::updateProgressValue()//定时时间到,更新进度条的值
{
    int value = ui->progressBar->value();//获取当前进度条的值
    value += 10;

    if(value >= 100)//值>=100表示下载完成,并弹出消息框提示用户
    {
        ui->progressBar->setValue(100);//更新进度条的值
        QMessageBox::about(this, "下载信息", "下载完成!");
        ui->btnDownload->setText("重新下载");
        timer->stop();//关闭定时器
    }
    else
    {
           ui->progressBar->setValue(value);//更新进度条的值
    }

}

void MainWindow::on_btnDownload_clicked()//下载 按钮
{
   if(timer->isActive())//如果定时器已经开启就关闭
   {
        timer->stop();//关闭定时器
        ui->btnDownload->setText("继续");
   }
   else//定时器还没有开启
   {
       if(ui->progressBar->value() >= 100)
       {
            ui->progressBar->setValue(0);//重置进度条的值
       }
       timer->start();//开启定时器
       ui->btnDownload->setText("暂停");
   }

}

三、例子2

        3.1  效果:

                    

         3.2 工程结构

                     

                    布局:

                     

         3.3 源文件

               QTimerDemo2.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QTimerDemo2
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

RESOURCES += \
    res.qrc


               mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    int index;//记录显示的是哪一张图片
    QStringList *list;//存放图片的路径
    QTimer *timer;//定时器
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_btnPlay_clicked();//放映按钮的点击响应函数
    void changePicture();//当定时器时间到,执行的函数
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


               main.cpp文件

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}


               mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPixmap>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    index = 0;
    timer = new QTimer(this);
    timer->setInterval(1000);//设置定时间隔时间为1000ms=1s
    connect(timer, SIGNAL(timeout()), this, SLOT(changePicture()));//timer定时器时间到发出timeout信号,当前对象收到信号后执行槽函数changePicture()

    list = new QStringList();//创建字符串集合
    list->append(":/res/imgs/wuya.png");
    list->append(":/res/imgs/yonghuai.png");
    list->append(":/res/imgs/chengxiang.png");
    list->append(":/res/imgs/zagang.png");

   // QPixmap pixmap("D:\\QtProj\\QTimerDemo2\\imgs\\yonghuai.png");//加载图片方式1
   //QPixmap pixmap(":/res/imgs/yonghuai.png");//加载资源文件图片,方式2
    QPixmap pixmap(list->at(index));//
    ui->labelPic->setPixmap(pixmap);//将图片设置到label上
}

MainWindow::~MainWindow()
{
    delete timer;
    delete ui;
}

void MainWindow::changePicture()
{
    index++;
    if(index  >= 4)
    {
        index = 0;
    }
    QPixmap pixmap(list->at(index));//
    ui->labelPic->setPixmap(pixmap);//将图片设置到label上
}

void MainWindow::on_btnPlay_clicked()//放映按钮的点击响应函数
{
    if(timer->isActive())//如果定时器已经开启就关闭
   {
        timer->stop();//关闭定时器
        ui->btnPlay->setText("放映");
   }
   else//定时器还没有开启
   {
       timer->start();//开启定时器
       ui->btnPlay->setText("暂停");
   }
}

                

四、总结

        1、QTimer定时器的基本操作

包含文件:#include <QTimer>
QTimer timer = new QTimer(this);//创建定时器对象
timer->setInterval(1000);//设置定时间隔时间为1000ms=1s

//定时时间到会触发timeout信号
//连接信号与槽函数,timer定时器时间到发出timeout信号,当前对象收到信号后执行槽函数changePicture()
connect(timer, SIGNAL(timeout()), this, SLOT(changePicture()));

timer->isActive();//当前定时器的状态,如果定时器已经开启就返回true

timer->start();//开启定时器
timer->stop();//关闭定时器

       详细用法:

          2、引用资源文件中的图片并使用QLabel显示图片

                资源文件的路径:

                

               

              引用:

              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值