QT

来源:互联网 发布:淘宝账号怎么注销掉 编辑:程序博客网 时间:2024/05/16 13:05

流程图:

Created with Raphaël 2.1.0创建类,父类是:QThreadstart()用来启动函数,相当于信号void run(),槽,来执行具体的内容。结束
#ifndef SENDTASK_H#define SENDTASK_H#include <QThread>class SendTask : public QThread{    Q_OBJECTpublic:    SendTask(QObject *parent);    ~SendTask();    int beginTask(const char *filename);//开始任务    int getStatus();//获得状态    int getProgress();//获得进度private:    void run();    char m_filename[128];    int m_filesize;//文件总大小    int m_bytesread;//读取长度    int m_status;//状态,0未激活,1结束,-1失败};#endif // SENDTASK_H
#include "SendTask.h"#include <string.h>#include <QDebug>#include "Dialog_Error.h"SendTask::SendTask(QObject *parent)    : QThread(parent){}SendTask::~SendTask(){}int SendTask::beginTask(const char *filename)//开始任务{    strcpy(m_filename, filename);    m_bytesread = 0;    m_filesize = 0;    m_status = 0;    start();//开始任务    return 0;}int SendTask::getStatus(){    return m_status;}int SendTask::getProgress(){    return m_bytesread * 100 / m_filesize;//返回百分比}void SendTask::run(){    FILE *fp = fopen(m_filename, "rb");    if(!fp)    {        m_status = -1;//执行失败        return ;    }    fseek(fp, 0, SEEK_END);    m_filesize = ftell(fp);    fseek(fp, 0, SEEK_SET);    char buf[1024];    while(1)    {        int n = fread(buf, 1, 1024, fp);        if(n <= 0)        {            break;//读取完成        }        m_bytesread += n;        qDebug() << m_bytesread;        QThread::msleep(100);    }    m_status = 1;//执行成功    fclose(fp);}