QT中使用QProcess执行命令,实时获取数据,例如进度条

前言

因为之前写了一个接收和发送文件的脚本,然后又需要获取进度,同步到进度条中。

效果:

使用正则匹配,获取命令行命令中的以下数据,然后同步到进度条

源码demo:

非完整代码:

cpp 复制代码
#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,可以自行替换

相关推荐
咛辉1 分钟前
spark和Hadoop之间的对比和联系
开发语言
Humbunklung22 分钟前
Sigmoid函数简介及其Python实现
开发语言·python·深度学习·机器学习
__lost31 分钟前
MATLAB退火算法和遗传算法解决旅行商问题
开发语言·算法·matlab·遗传算法·退火算法
恶霸不委屈38 分钟前
MATLAB函数调用全解析:从入门到精通
开发语言·算法·matlab·匿名函数·函数句柄
建群新人小猿1 小时前
CRMEB-PRO系统定时任务扩展开发指南
android·java·开发语言·前端
程序员秘密基地1 小时前
基于c#,asp.net webform, sql server数据库,在线档案管理系统
开发语言·sqlserver·asp.net·.net·源代码管理
知识分享小能手1 小时前
JavaScript学习教程,从入门到精通,Ajax数据交换格式与跨域处理(26)
xml·开发语言·前端·javascript·学习·ajax·css3
5:001 小时前
【QT】编写第一个 QT 程序 & 对象树 & Qt 编程事项 & 内存泄露问题
开发语言·qt
长安城没有风2 小时前
JAVA SE 反射,枚举与lambda表达式
java·开发语言
byte轻骑兵3 小时前
【C++类和数据抽象】消息处理示例(2)
开发语言·c++