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()<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

QProcess 启动 进程 传参数 启动控制台进程 传参_第1张图片

你可能感兴趣的:(QT,qt,开发语言)