陶瓷行业网站建设招标书,福州定制网站开发制作,展览展示展厅设计,抖音logo在线设计生成器免费QProcess Qt提供了一个QProcess类用于启动外部程序并与之通信.这个类是异步工作的#xff0c;而且在后台执行#xff0c;这样用户界面就可以始终保持响应。 启动一个新的进程的操作非常简单,只需要将待启动的程序名称和启动参数传递给start()函数即可. 例如#xff1a; QObj… QProcess Qt提供了一个QProcess类用于启动外部程序并与之通信.这个类是异步工作的而且在后台执行这样用户界面就可以始终保持响应。 启动一个新的进程的操作非常简单,只需要将待启动的程序名称和启动参数传递给start()函数即可. 例如 QObject *parent;QString program tar QStringList arguments;arguments czvf backup.tar.gz /home;QProcess *myProcess new QProcess(parent);QProcess-start(program, arguments);(1)当调用start()函数后,myProcess进程立即进入启动状态,但tar程序尚未被调用,不能读写标准输入输出设备. (2)当进程完成启动后就进入运行状态并向外发出started()信号.在输入输出方面,QProcess将一个进程看做一个流类型的I/O设备,可以像使用QTcpSocket读写流类型的网络连接一样来读写一个进程.可以通过QIODevice::write()函数向所启动进程的标准输入写数据,也可以通过QIODevice::readAll()、QIODevice::readLine()和QIODevice::getChar()函数从这个进程的标准输出读数据.此外由于QProcess是从QIODevice类继承而来的,因此,它也可以作为QXmlReader 的数据在源,或者为QFtp产生上传数据. 3最后,当进程退出时QProcess进入起始状态----非运行状态,并发出finished()信号. void finished(int exitCode, QProcess::ExitStatus exitStatus)信号在参数中返回了进程退出的退出码和退出状态,可以调用exitCode()函数和exitStatus()函数分别获取最后退出进程的这两个值.其中,Qt定义的进程退出状态只有正常退出和进程崩溃两种,分别对应值QProcess::NormalExit(值0)和QProcess::CrashExit(值1).当进程在运 行中产生错误时,QProcess将发出error()信号,可以通过,调用error()函数返回最后一次产生错误的类型,并通过,state()找出此时进程所处的状态. Qt定义了如下的进程错误代码: ---------------------------------------------------------------- 错误常量 值 描述 QProcess::FailedToStart 0 进程启动失败 QProcess::Crashed 1 进程成功启动后崩溃 QProcess::Timedout 2 最后一次调用waitFor...()函数超时.此时QProcess状态不变,并可以再次调用waitFor()类型的函数 QProcess::WriteError 3 向进程写入时出错.如进程尚未启动,或者输入通道被关闭时 QProcess::ReadError 4 从进程中读取数据时出错.如进程尚未启动时 QProcess::UnknownError 5 未知错误.这也是error()函数返回的默认值 进程的标准输出: stdout:通常用于控制台下输出 stderr:通常用于进程打印错误 它们本质上是两个独立的数据流. 可以通过调用setReadChanned()函数设置当前的读通道 当有可读数据时Qt将发发出readyRead()信号 如果是标准输出和标准错误通道中读取数据,还会发出readyReadStandardOutput()信号 如果是标准错误也会发出readyReadStandardError()信号 readAllStandardOutput()函数从标准输出通道中读取数据 readAllStandardErrot()函数从标准错误通道中读取数据 在进程启动以前以MergedChannels参数调用setReadChannelMode()函数可以把标准输出通道和标准输错误通道合并 例如 #include QApplication
#include QProcess
#include QString
#include iostreamint main(int argc, char *argv[])
{QApplication app(argc, argv);QProcess proc;QStringList arguments;arguments -na;proc.start(netstat, arguments);// 等待进程启动if (!proc.waitForStarted()){std::cout 启动失败\n;return false;}// 关闭写通道,因为没有向进程写数据,没用到 proc.closeWriteChannel();// 用于保存进程的控制台输出QByteArray procOutput;// 等待进程结束while (false proc.waitForFinished()){;}// 读取进程输出到控制台的数据procOutput proc.readAll();// 输出读到的数据std::cout procOutput.data() std::endl;// 返回return EXIT_SUCCESS;
}