前言
因为之前写了一个接收和发送文件的脚本,然后又需要获取进度,同步到进度条中。
效果:
使用正则匹配,获取命令行命令中的以下数据,然后同步到进度条
源码demo:
非完整代码:
#include <QRegularExpression>
#include <QProcess>bool transferFile(const QString &localFilePath, const QString &remoteFilePath, const QString &host, const QString &username, const QString &password)
{ui->sendProgressBar->setValue(0);QRegularExpression re("(\\d{1,3})%"); // 匹配1到3位数字后面跟着一个百分号QProcess process;QString appPath;if(sendFileShPath.endsWith("/")){appPath = sendFileShPath + "send_file";}else{appPath = sendFileShPath + "/send_file";}QString cmd = QString("%6 %1 %2 %3 %4 %5").arg(username).arg(host).arg(password).arg(localFilePath).arg(remoteFilePath).arg(appPath);process.start(cmd);qDebug()<<QString("%1 send to %2").arg(localFilePath).arg(remoteFilePath);// 当有标准输出可读时,读取并输出内容QObject::connect(&process, &QProcess::readyRead, [&]() {while (!process.atEnd()) {QByteArray ba = process.readLine();QString s = QString::fromUtf8(ba).trimmed();QRegularExpressionMatch match = re.match(s);if(match.captured(1) != ""){int curNum = match.captured(1).toInt();qDebug() << curNum <<"%";ui->sendProgressBar->setValue(curNum);}}});if (!process.waitForStarted()) {qDebug() << "Failed to start process.";return false;}process.waitForFinished();return true;
}
以上代码中的cmd,可以自行替换