QProcess 类使用总结

背景

QProcess 类用于启动外部程序并与它们通信,QProcess 将进程视为I/O 设备,可以对进程进行写入和读取。

调用参数设置

①.同时指定路径和参数调用程序

QProcess * process = new QProcess(this);
process->execute("cmd /c ping 127.0.0.1");

②.分别指定路径和参数调用程序

QProcess * process = new QProcess(this);
process->execute("cmd ",QStringList()<<"/c"<<"ping 127.0.0.1");

③.先设置参数再启动

process->setProgram("cmd");
process->setArguments(QStringList() << "/c" << "ping 127.0.0.1");
process->start();

调用外部程序

①.同步调用
使用 execute 会阻塞当前程序执行,直到外部程序退出。

QProcess * process = new QProcess(this);
process->execute("C:\\Windows\\System32\\notepad.exe");

②.异步调用
使用 start 不会阻塞当前程序执行。

QProcess * process = new QProcess(this);
process->start("C:\\Windows\\System32\\notepad.exe");

③.分离调用
使用 startDetached 调用的程序会和当前进程脱离关系独立运行。

QProcess * process = new QProcess(this);
process->startDetached("C:\\Windows\\System32\\notepad.exe");

同步操作函数

①.阻塞至调用成功

if (!process->waitForStarted())
{
  //调用失败
}

②.阻塞至有数据读取

if (process->waitForReadyRead())
{
  //有数据可读取
}

③.阻塞至程序结束

if (process->waitForStarted())
{
  //进程结束
}

和外部程序交互

①.读取外出程序输出

QProcess * process = new QProcess(this);

process->setReadChannel(QProcess::StandardOutput);
process->setProgram("C:\\Windows\\System32\\notepad.exe");

connect(process, &QProcess::readyReadStandardOutput, [process]() 
{
  std::cout << process->readAllStandardOutput().toStdString();  
});
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), [&](int exitCode, QProcess::ExitStatus) 
  {
    std::cout << "exited"  << std::endl;
  });

process->start("cmd /c ping 127.0.0.1");
process->waitForStarted();

②.给外部程序输入数据

QProcess * process = new QProcess(this);

process->setReadChannel(QProcess::StandardOutput);
process->setProgram("C:\\Windows\\System32\\notepad.exe");

connect(process, &QProcess::readyReadStandardOutput, [process]() 
{
    std::cout << process->readAllStandardOutput().toStdString();  
});
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), [&](int exitCode, QProcess::ExitStatus) 
  {
    std::cout << "exited"  << std::endl;
});

process->start("cmd");
process->waitForStarted();

process->write("ping 127.0.0.1\r\n");

执行 cmd 命令

QProcess 可以直接执行 cmd 命令:

int pid = qApp->applicationPid();
QString killcmd = QString("taskkill /pid %1 /f").arg(pid);
QProcess::startDetached(killcmd);

在这里插入图片描述

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值