QProcess

  QPROCESS类用来启动外部程序并且与之进行通信。

      要运行一个process,将你想运行的程序的名称和命令行参数作为start()的arguments.  Arguments是作为QStringlist中单独的字符串来应用的。

   例如,下面的代码片段在Motif style在X11平台上通过传递了两个包含"-style" and "motif"参数的参数列表来运行了一个analog clock example。

     QObject *parent;

     QString program ="./path/to/Qt/examples/widgets/analogclock";

     QStringList arguments;

     arguments << "-style"<< "motif";

     QProcess *myProcess = newQProcess(parent);

     myProcess->start(program, arguments);

     QProcess然后进入了starting状态,当进程开始的时候,QProcess进入了运行模式并且发出started()信号。

    QProcess允许你将一个process作为序列I/O 设备。 你可以读写进程就像你使用QTCPSocket进入网络连接一样。这时你可以通过调用write()写数据的标准输入, 通过调用read(),readline(), 和getchar()标准输出来读取。因为它继承了QIODevice, QProcess,同样可以用来作为QXmlReader的输入源,或者使用QFtp生成可被上传的数据。

注意:在windows CE和symbian, 读写进程是不支持的。

  当进程退出的时候,QProcess重新进入了NotRunning状态(初始状态),并且发出finish();

   finish()信号提供了进程的退码和退出状态,你也可以调用exitCode()来获取最后进程退出码,exitStatus()来获取他的退出状态。 如果期间发生错误,QProcess会发出error()信号。 你可以调用error()来找出最新发生错误的类型,和state()来找出当前进程状态。

  通过channels来通信

   进程有两个预定义的输出渠道:stdout(提供了标准console输出) 和stderr(通常提供进程输出地错误)。 这些驱动代表两种不同的数据流。你可以在setReadChannel()来对它们进行切换。当数据在当前频道可用的时候QProcess发出readyRead()。当新的标准输出数据可用的时候它也发出readyReadStandard(),当新的标准错误数据产生的时候,发出readyReadSrandardError().  你也可以调用readAllStandardOutput()或者readAllStandardError()来读取所有的数据。

下面举个例子,用QProcess来调用cmd对某个qt工程进行编译

     假设在C:\qtproject文件夹下有个compile.pro的工程 

       QProcess * process= newQProcess;

       process->setWorkingDirectory("c:\\qtproject");

       process->start("cmd");

      process->waitingForStarted();

      process->write("qmake compile.pro\n");

      process->write("mingw32-make\n");

      ...

你就会发现在C:\qtproject文件夹下生成了makefile和debug等文件或文件夹。 这就完成了compile.pro工程的编译。

   当然如果你想获取编译的信息, 也可以通过connect(cmd, SIGNAL(readyRead()), this, SLOT(你的函数()));来获取编译信息

 
 
  以及 connect(cmd,SIGNAL(readyReadStandardError()),this,SLOT(你的函数()));来获取编译可能会发生的错误。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值