赞
踩
该模块实现了Kermit异步发送文件功能。
class QSerialPort;
class KermitSendFile;
class KermitFileSender : public QObject
{
Q_OBJECT
public:
explicit KermitFileSender(QSerialPort *serial, QObject *parent = nullptr);
~KermitFileSender();
signals:
void start_send(QString const& fileName);
void cancel_send();
void gotFileSize(quint64 filesize);
void progressInfo(quint32 blockNumber, quint64 bytesOfSend);
void finished();
void error(QString const& e);
public:
void start(QString const& fileName);
void stop();
void cancel();
private:
QThread workerThread;
KermitSendFile* worker_;
};
公共接口:
信号:
KermitFileSender::KermitFileSender(QSerialPort *serial, QObject *parent)
: QObject(parent)
{
KermitSendFile* worker = new KermitSendFile(serial);
serial->moveToThread(&workerThread);
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &KermitFileSender::start_send, worker, &KermitSendFile::start);
connect(this, &KermitFileSender::cancel_send, worker, &KermitSendFile::cancel);
connect(worker, &KermitSendFile::gotFileSize, this, &KermitFileSender::gotFileSize);
connect(worker, &KermitSendFile::progressInfo, this, &KermitFileSender::progressInfo);
connect(worker, &KermitSendFile::finished, this, &KermitFileSender::finished);
connect(worker, &KermitSendFile::error, this, &KermitFileSender::error);
worker_ = worker;
workerThread.start();
}
KermitFileSender::~KermitFileSender()
{
workerThread.quit();
workerThread.wait();
}
函数说明:
KermitFileSender::~KermitFileSender()
{
workerThread.quit();
workerThread.wait();
}
void KermitFileSender::start(QString const& fileName)
{
emit start_send(fileName);
}
void KermitFileSender::stop()
{
worker_->stop();
}
void KermitFileSender::cancel()
{
emit cancel_send();
}
函数说明:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。