因为之前写了一个接收和发送文件的脚本,然后又需要获取进度,同步到进度条中。
效果:
使用正则匹配,获取命令行命令中的以下数据,然后同步到进度条
非完整代码:
- #include
- #include
-
- 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,可以自行替换