品质管理系统
它可以用于完成外部程序的启动和通信。
一、启动外部程序的两种方式
1 )一体化) void qprocess :3360 start (constqstringprogram,const QStringList arguments,OpenMode mode=ReadWrite ) )。
外部程序启动后,随着主程序的结束而结束。
2 )分离式) void qprocess :3360 start detached (constqstringprogram,const QStringList arguments,constqstringworkingdirectory
外部程序启动后,主程序结束时不结束,继续执行。
二、启动前要做的工作:
要启动外部程序,必须传递外部程序的路径和执行参数。 参数将在QStringList中引入。
1 )设置路径
void qprocess :3360集程序(constqstringprogram )。
2 )设定参数【选项】
语音质量处理:3360集协议(constqstringlistarguments )。
3 )启动
选择启动函数。 有两种方法
三.启动状态
如果没有启动外部程序,则该状态为NotRunning;
启动后,其状态将更改为Starting,并且正在启动,但此时尚未调用
启动后,继续运行,同时发送started ()信号。 此时,可以对QProcess执行读写操作。
结束后,该状态变为NotRunning,同时发出finished () )信号。 完成) )信号具有退出代码和退出状态,分别为退出代码()和退出状态() )获取。
如果发生错误,QProcess会发出错误()信号。 同样,也可以在error )、state )和中获取当前程序的状态。
四. QProcess和QIODevice
QProcess继承为QIODevice,因此可以作为I/O设备读写。
五.互动
QProcess有两个预定义的输入通道:标准输出stdout和标准错误stderr。
可以读取setReadChannel输出的通道。
通道数据准备好后,QProcess发送就绪读取()信号。 对于标准输出,发出readyReadStandardOutput ()信号。 如果是标准错误,
发出readyReadStandardError ()信号。
常见的读取方法包括read ()、readAll ()或getChar () )。 也可以从readAllStandardOutput )、readAllStandardError )读取标准输出和标准错误通道的数据。
某些程序需要设置环境才能执行特殊操作。 环境变量为setEnvironment (,工作目录为setWorkingDirectory ),默认工作路径为当前调用程序的工作路径。
六.同步API
QProcess提供了一组函数,用于提及事件循环以完成同步操作。
1 )阻止等待()//直到外部程序启动
2 )阻止waitForReadyRead ()//输出通道读取新数据
3 )阻止waitForBytesWritten ()//直到写入输入通道数据
4 )阻止等待() )//直到外部程序结束
在主线程中调用这些函数可能会导致当前用户界面没有响应。
七. QProcess流程类
Qt提供了用于启动和通信外部程序的QProcess类。 启动新进程的操作很简单,只需将要启动的程序名称和启动参数传递给start ()函数即可。
示例:
q对象*父对象;
qstring程序=' tar ';
质量列表协议;
arguments ' czvf ' ' backup.tar.gz ' '/home ';
qprocess * my process=new qprocess (parent );
qprocess-start (程序,协议);
start ) )函数被调用后,myProcess进程将立即启动,但tar程序尚未被调用,无法加载到标准输入/输出设备中。 进程启动完成后,将进入“运行状态”,并发送到外部
started ) )在输入/输出方面,QProcess将该过程视为一种类型的I/O设备,并且可以像使用QTcpSocket读写流类型的网络连接一样读写该过程
可以使用QIODevice:write ()函数将数据写入已启动进程的标准输入,也可以使用QIODeivic:read )、QIODevice:readLine、qiodevice : readline
Qt定义了以下进程错误代码:
错误常数值的说明
qprocess :3360故障到启动0进程启动失败
QProcess:Crashed 1进程成功后崩溃
QProcess:Timedout 2上次调用waitFor . ()函数时超时。 此时QProcess的状态不变。 waitFor . () ) )类型的函数
QProcess:WriteError 3将数据写入进程时发生错误。 如果进程尚未启动,或者输入通道已关闭。
QProcee:ReadError 4从进程读取数据时发生错误。 如果进程未启动
qprocess :3360未知错误。 这也是error ) )函数返回的默认值。
八、工艺标准输出:
stdout:通常用于控制台上的输出
stderr:通常用于进程打印错误
本质上是两个独立的数据流
可以通过调用setReadChanned ()函数设置当前读取通道
如果有可读数据,Qt将发出就绪读取)信号
对于标准输出和标准错误通道中的读取数据,还发出readyReadStandardOutput )信号
readAllStandardOutput ) )函数从标准输出通道读取数据
readAllStandardErrot ) )函数从标准错误通道读取数据
可以在进程启动之前调用具有合并通道参数的setReadChannelMode )函数,以合并标准输出通道和标准输出错误通道。
The future's not set,thereisnofatebutwhatwemakeforourselves。