当前位置: 首页 > article >正文

QProcess 启动 进程 传参数 启动控制台进程 传参

目录

QProcess

启动外部程序的两种方式

依赖式

分离式:

启动进程前的预处理

设置启动路径

设置启动命令参数

 设置启动工作目录

  设置启动所需环境:

启动的状态

 code smple:

QProcess 控制台进程

QProcess启动控制台不显示窗口

注意:这里不能正常传参;

通过“cmd.exe”启动,可以显示控制台,方便输出信息

解决不能传参问题

调用控制台,并传入参数 ,同时 显示控制台:


QProcess

用于完成启动外部程序,并与其交互通信。

启动外部程序的两种方式

依赖式

外部程序启动后,将随主程序的退出而退出。

void start(const QString & program,const QStringList &arguments,OpenMode mode = ReadWrite)
分离式:

外部程序启动后,当主程序退出时并不退出,而是继续运行。

void startDetached(const QString & program,const QStringList & arguments,const QString&workingDirectory=QString(),qint64 *pid =0)

启动进程前的预处理

设置启动路径

可以提前设置启动路径,也可以在start方法中进行设置

void setProgram(const QString & program)
设置启动命令参数

可以提前设置启动命令参数也可以不设置(非必须),也可以在start方法中进行设置。

void setArguments(const QStringList & arguments)
 设置启动工作目录
void setWorkingDirectory
  设置启动所需环境:
  void setProcessEnvironment	

	

code sample:

QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PATH", env.value("PATH") + ";" + QCoreApplication::applicationDirPath());
 
process->setProcessEnvironment(env);

启动的状态

1、外部程序未启动时,状态是NotRunning;
2、外部程序启动时,状态是Starting;
3、外部程序启动之后,状态是Running,并发出started()信号,此时可对QProcess进行RW操作;
4、外部程序退出时,状态是NotRunning,并发出finished()信号。finished()信号会包含退出码和退出状态信息,可通过exitCode()和exitStatus()来获得。
5、外部程序发生错误时,Qprocess会发出一个error()信号,可通过error()来获得其错误类型,通过state()获得当前程序的状态。


 code smple:

Send:

      QProcess* process=new QProcess(this);
       connect(process,&QProcess::started,[=]()//启动完成
       {
           qDebug()<<"进程已启动";
       });
       connect(process,&QProcess::stateChanged,[=]()//进程状态改变
       {
           if(process->state()==QProcess::Running)
           {
               qDebug()<<"正在运行";
           }
           else if(process->state()==QProcess::NotRunning)
           {
               qDebug()<<"不在运行";
              
           }
           else
           {
               qDebug()<<"正在启动";

           }
       });
       connect(process,&QProcess::errorOccurred,[=]()
       {
           qDebug()<<process->errorString();//输出错误信息
       });

      QString cmd = "xxx.exe";
     QStringList args;
     args.append("-h");
     process.start(cmd, args);
     process.waitForFinished();

Receive:

int main(int argc, char** argv)
{
	printf("argc = %d\n", argc);
	printf("path0 = %s\n", argv[0]);
	printf("path1 = %s\n", argv[1]);

}

QProcess 控制台进程

QProcess启动控制台不显示窗口
QProcess *process  = new QProcess();
  QStringList paraList;
  paraList << "D:/AI_Segment";
process->setArguments(paraList);

process->start("D:/xx.exe");
注意:这里不能正常传参;
通过“cmd.exe”启动,可以显示控制台,方便输出信息
    QProcess *process = new QProcess();
    process ->start("cmd.exe");
    process ->write("cd /d D:/ && start xx.exe\n");
解决不能传参问题

使用 startDetached

QProcess *process  = new QProcess();
  QStringList paraList;
  paraList << "D:/AI_Segment";
process->setArguments(paraList);

process->startDetached("D:/xx.exe");

但这里方案无法,显示的显示控制台,无法看到哪个弹出的黑色控制台;

调用控制台,并传入参数 ,同时 显示控制台:

    QProcess *process = new QProcess();
 
    process ->start("cmd.exe" );
    process ->write("cd /d D:/ && start AI-SegmentEx.exe --xml\n");

接收控制台输出:

argc = 2
path0 = AI-SegmentEx.exe
pathl = --xml


http://www.kler.cn/a/154612.html

相关文章:

  • 【JAVA】使用IDEA创建maven聚合项目
  • 周末总结(2024/11/16)
  • 蓝桥杯——数组
  • SpringBoot 应用出错 Comparison method violates its general contract!
  • 【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词
  • 二五、pxe自动装机
  • Python标准库:math库【侯小啾python领航班系列(十六)】
  • STM32F407-14.3.8-01强制输出模式
  • 删除链表的倒数第N个节点,剑指offerII(21),力扣
  • 给Web3应用新增区块链数据(Web3项目一实战之六)
  • iceoryx(冰羚)-进程间消息同步
  • c语言:整数与浮点数在内存中的存储方式
  • 抖音视频如何无水印保存?抖音视频无水印保存教程
  • k8s部署jenkins
  • 【前端】JS实现SQL格式化
  • Adobe Indesign操作
  • 『测试基础』| 如何理解测试用例管理和缺陷管理?
  • 【海思SS528 | VO】MPP媒体处理软件V5.0 | 视频输出模块——学习笔记
  • RxJava
  • Halcon tiff 点云读取以及平面矫正
  • 算法工程师面试八股(搜广推方向)
  • jenkins使用nexus插件
  • 如何创建一个vue工程
  • CSS浅谈动画性能
  • 密码学学习笔记(二十二):RSA签名方案
  • CC2530basic_Rf串口无线收发