QProcess用法

QProcess用法QProcess 用法

                QProcess类用于启动外部程序并与之通信。

启动一个新进程的方式:把待启动的程序名称和启动参数传递给start()函数即可。
例如:
QProcess *parent;
QString program = “tar”;
QStringList arguments;
arguments << "czvf" << "backup.tar.gz" << "/home";
QProcess *myProcess = new QProcess(parent);
QProcess->start(program,arguments);
当调用start()函数后,myProcess进程立即进入启动状态,但tar程序尚未被调用,不能读写标准输入输出设备,当进程完成启动后就进入“运行状态”并向外发出started()信号。在输入输出方面,QProcess将一个进程看做一个流类型的I/O设备,可以像使用QTcpSocket读写流类型的网络连接一样来读写一个进程,可以通过QIODevice::write()函数向后所启动的标准输入写数据,也可以通过QIODevice::resd().QIODevice::readLine()和QIODevice::getChar()从这个进程的标准输出读数据。此外由于QProcess是从QIODevice类继承而来的,所以它也可以作为QXmlReader的数据在源,或者为QFtp产生上传数据。最后,当进程退出时QProcess进入起始状态–“非运行状态”,并发出finish()信号。
void finished(int exitCode, QProcess::ExitStatus exitStatus)先好在进程中返回了进程退出的退出码和退出状态,可以调取exitCode()函数和exitStatus()函数分别获取最后退出进程的这两个值。其中“退出状态”只有正常退出和进程崩溃两种,分别对应值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
#include
#include
#include

int 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;

}

           

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227143.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:51
下一篇 2026年3月16日 下午9:51


相关推荐

  • python电脑攻击_python实现MAC洪水攻击

    python电脑攻击_python实现MAC洪水攻击前言 一般交换机在数据转发过程中 依靠对 CAM 表的查询来确定正确的转发接口 如果在 CAM 表中查询不到 则将该数据帧作为广播帧处理 CAM 表存储数量有限 当数据到达上限之后将不会存储 根据此原理 可以通过在刷新时间内对其发送足够多的不同 MAC 地址的伪造数据包来占用 CAM 表 这种情况下 所有经过交换机的数据帧都会被作为广播帧处理 然后就可以获取到所有经过交换机的正常数据帧 并且交换机模式会降为 Hub 模

    2026年3月18日
    2
  • 决策树原理及Python代码实现

    决策树原理及Python代码实现决策树其实就是按节点分类数据集的一种方法。在本文中,我将讨论数学上如何使用信息论划分数据集,并编写代码构建决策树。创建决策树进行分类的流程如下:(1)创建数据集(2)计算数据集的信息熵(3)遍历所有特征,选择信息熵最小的特征,即为最好的分类特征(4)根据上一步得到的分类特征分割数据集,并将该特征从列表中移除(5)执行递归函数,返回第三

    2025年10月7日
    3
  • 微信小程序 – 80个实用的微信小程序项目实例

    微信小程序 – 80个实用的微信小程序项目实例wx-gesture-lock微信小程序的手势密码WXCustomSwitch微信小程序自定义Switch组件模板WeixinAppBdNovel微信小程序demo:百度小说搜索shitoujiandaobu小程序:石头剪刀布(附代码说明)audiodemo微信小程序开发之视频播放器Video弹幕弹幕颜色自定义star微信小程序开发之五星评分switchCity微信小程序开发之城市选择器城市切换huadong_del微信小程序滑动删除效果jianhang_menu

    2022年6月12日
    41
  • wicket 详解

    wicket 详解1 ListView 其实这个控件是用处最少的 也是最好决定的 如果数据很少 不需要分页 那么就是它了 小数据列表的不二之选 如购物网站上 你最近查看的 n 本书 2 PageableList 这是 Wicket 核心包中提供的一个分页控件 如果要分页操作 通常还需要一个 PageNavigate 通常情况下 它不能够支持大量的数据列表 因为它

    2026年3月18日
    1
  • webservice中文乱码处理_java取session乱码问题

    webservice中文乱码处理_java取session乱码问题javawebservice部分中文乱码解决,注意是部分乱码,不是全部哦!!!

    2022年10月9日
    3
  • 阿里云域名绑定IP手把手教学

    阿里云域名绑定IP手把手教学文章目录前提步骤 1 进入云解析 DNS2 解析 3 验证高级使用二级域名前提登录的阿里云账户下 需要拥有一个阿里云域和一台 ECS 服务器 什么是云解析 DNS 云解析 DNS AlibabaCloud 是一种安全 快速 稳定 可扩展的权威 DNS 服务 云解析 DNS 为企业和开发者将易于管理识别的域名转换为计算机用于互连通信的数字 IP 地址 从而将用户的访问路由到相应的网站或应用服务器 com net cn xin top xyz vip club shop wang ren 等域名

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号