具体实现代码如下:
#include <QProgressBar>//必须要包含的头文件
#include <QProcess>
// 创建一个QProgressBar对象
QProgressBar *progressBar = new QProgressBar(this);
QProcess *proces;
process_show=new process;
// 设置进度条的最小值和最大值
progressBar->setRange(0, 100);
//设置位置
progressBar->setGeometry(10, 30, 300, 30);
// // 设置进度条的当前值
// progressBar->setValue(50);
// 设置进度条的文本显示格式
progressBar->setFormat("当前进度为:%p%");
下面是一些官方文档里面对于QProcess的使用注意事项
QProcess::ProcessError
此枚举描述 报告的不同类型的错误。
QProcess::FailedToStart | 0 | 进程无法启动。调用的程序丢失,或者您可能没有足够的权限来调用该程序。 |
QProcess::Crashed | 1 | 成功启动后一段时间,进程崩溃了。 |
QProcess::Timedout | 2 | 最后的等待...() 函数超时。的状态不变,可以尝试调用等待...() 再次。 |
QProcess::WriteError | 4 | 尝试写入进程时出错。例如,进程可能未运行,或者可能已关闭其输入通道。 |
QProcess::ReadError | 3 | 尝试从进程中读取时出错。例如,进程可能未运行。 |
QProcess::UnknownError | 5 | 发生未知错误。这是 () 的默认返回值。 |
QProcess::ProcessState
此枚举描述了 的不同状态。
QProcess::NotRunning | 0 | 进程未运行。 |
QProcess::Starting | 1 | 该过程正在启动,但尚未调用该程序。 |
QProcess::Running | 2 | 进程正在运行,已准备好进行读取和写入。 |
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)
该过程完成后会发出此信号。是进程的退出代码(仅对正常退出有效),并且是退出状态。该过程完成后,其中的缓冲区仍然完好无损。您仍然可以读取进程在完成之前可能已写入的任何数据。
:信号完成在此类中过载。为了使用函数指针语法连接到此信号,Qt提供了一个方便的帮助程序来获取函数指针,如以下示例所示:
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[=](int exitCode, QProcess::ExitStatus exitStatus){ /* ... */ });
void QProcess::kill()
终止当前进程,使其立即退出。
在Windows上,kill()使用TerminateProcess,在Unix和macOS上,SIGKILL信号被发送到进程。
void QProcess::setupChildProcess()
此函数在子进程上下文中调用,就在程序在 Unix 或 macOS 上执行之前(即,在 之后,但在 之前)。重新实现此函数以执行子进程的最后一分钟初始化。
class SandboxProcess : public QProcess
{
...
protected:
void setupChildProcess() override;
...
};
void SandboxProcess::setupChildProcess()
{
// Drop all privileges in the child process, and enter
// a chroot jail.
#if defined Q_OS_UNIX
::setgroups(0, 0);
::chroot("/etc/safe");
::chdir("/");
::setgid(safeGid);
::setuid(safeUid);
::umask(0);
#endif
}
您不能从此函数退出进程(例如,通过调用 exit()。如果需要在程序开始执行之前停止程序,解决方法是发出 finished(),然后调用 exit()。