如何在QProcess中执行Shell脚本时更新QprogressBar?

时间:2012-08-01 05:08:54

标签: qt4

我正在开发一个将文件从NFS服务器下载到我的电脑的应用程序。为了完成我的任务,我编写了一个Shell脚本来复制给定路径上的所有目录并使用QProcess执行脚本。 QProcess工作正常并下载所有目录。

现在,我想在QProgressBar上显示下载过程报告。 (与从互联网下载文件时在窗口中看到的相同)。

我尝试使用谷歌搜索并使用信号找到一些想法并尝试如下:

void NfsClient::NfsDownload()
{
    download = new QProcess(this);
    connect(download, SIGNAL(readyReadStandardOutput()), this, SLOT(displayProgressBar()) );
    download->execute("bash /home/samurai/NfsFileDownload.sh");
}


void NfsClient::displayProgressBar()
{
    ui->progressbar->setvalue(download->readAll().toInt());
}

但是这个readyReadStandardOutput()信号永远不会发出。执行脚本时,我的Qt窗口变为冻结。 Progressbar保持不变。 :(

有没有办法相应更新QProgressbar ??? 或任何想法显示下载过程的GUI视图???

任何建议/想法???

1 个答案:

答案 0 :(得分:0)

我通过删除Shell脚本概念并实现QDir类来解决它。

因为要访问NFS服务器,客户端必须将服务器目录挂载到其一侧的文件夹中。因此,为了从本地文件夹复制,最好使用内置的Qt类QDir进行复制,删除,上传功能。