当前位置: 首页 > news >正文

如何选择品牌网站建设网站设计规划

如何选择品牌网站建设,网站设计规划,哈尔滨营销网站制作,网站建设实训报告2000字QProcess理论使用总结一、概述二、使用三、通过 Channel 通道通信四、同步进程API五、注意事项1. 平台特性2. 不能实时读取一、概述 QProcess 其实更多的是与外面进程进行交互的一个工具类,通过这个类来启动外部进程,获取这个进程的标准输出&#xff0c…

QProcess理论使用总结

  • 一、概述
  • 二、使用
  • 三、通过 Channel 通道通信
  • 四、同步进程API
  • 五、注意事项
    • 1. 平台特性
    • 2. 不能实时读取

一、概述

QProcess 其实更多的是与外面进程进行交互的一个工具类,通过这个类来启动外部进程,获取这个进程的标准输出,同时也可以向这个类写入数据,外部进程根据写入的指令执行对应的命令,我们可以也可能获取到输出,但是这种输出是取决于外部的进程。

二、使用

要启动一个进程外部,需要将要运行的程序的名称和命令行参数作为参数传递给start()。就很像命令行里面的执行一样。

多参数可以存放在 QStringList 数组中。

或者,你可以设置这个程序,让它使用setProgram()和setArguments()运行,然后调用start()或open()。

例如,下面的代码片段在X11平台上以 Fusion 样式运行模拟时钟示例,其参数列表中包含" style"和" Fusion "两项:

QObject *parent;...
QString program = "./path/to/Qt/examples/widgets/analogclock";
QStringList arguments;
arguments << "-style" << "fusion";
QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments);

然后,QProcess进入启动状态,当外部进程开始时,QProcess进入运行状态,并发出 started() 信号。

QProcess 允许我们将进程视为 序列I/O 设备。因为 QProcess 本身继承至 QIODevice 类,我们可以对进程进行读写,就像使用QTcpSocket 访问网络连接一样。然后,你可以调用write()来写入进程的标准输入,并调用read()、readLine() 和 getChar() 来读取标准输出。因为它继承了QIODevice,所以QProcess 也可以用作 QXmlReader 的输入源,或者用来生成要使用QNetworkAccessManager上传的数据。

当外部进程退出时,QProcess 重新进入NotRunning 状态(初始状态),并发出 finished() 信号。
finished()信号提供了进程的退出代码和退出状态作为参数,你还可以调用exitCode()来获得最后一个已经完成的进程的退出代码,调用exitStatus()来获得它的退出状态。

如果在任何时间点发生错误,QProcess将发出erroroccurs()信号。你还可以调用error()来查找上次发生的错误类型,调用state()来查找当前进程的状态。

  • 注意:VxWorks、iOS、tvOS、watchOS或UWP平台不支持QProcess。

三、通过 Channel 通道通信

进程有两个预定义的输出通道:

  • 标准输出通道(stdout)提供常规控制台输出
  • 标准错误通道(stderr)通常提供进程打印的错误。

这些通道代表两个独立的数据流。你可以通过调用setReadChannel()来切换它们。

当数据在当前读通道上可用时,QProcess发出 readyRead() 【这个是继承至 QIODevice 的功能】。

当有新的标准输出数据时,它还会触发readyReadStandardOutput()
当有新的标准错误数据时,它还会触发readyreadstandardror()。

除了调用read()、readLine()或getChar(),你还可以通过调用 readAllStandardOutput() 或 readallstandderror() 显式地从两个通道中读取所有数据。

这些频道的术语可能会引起误解。
请注意,进程的输出通道对应于QProcess的读通道,而进程的输入通道对应于QProcess的写通道。这是因为我们使用QProcess 读取的内容是过程的输出,而我们写入的内容成为过程的输入。我们读的就是外部进程的输出,我们写的就是外部进程的输入。

QProcess 可以合并两个输出通道,使来自运行过程的标准输出和标准错误数据都使用标准输出通道。在启动进程之前,使用MergedChannels 调用setProcessChannelMode( )来激活此功能。

您还可以选择将ForwardedChannels作为参数,将正在运行的进程的输出转发给调用的主进程。也可以只转发一个输出通道——通常会使用ForwardedErrorChannel,但也存在ForwardedOutputChannel。请注意,在GUI应用程序中使用通道转发通常是一个坏主意——您应该以图形方式显示错误。

某些进程需要特殊的环境设置才能运行。调用setProcessEnvironment()可以设置进程的环境变量。
要设置工作目录,可以调用setWorkingDirectory()。默认情况下,进程运行在调用进程的当前工作目录中。

以QProcess启动的GUI应用程序的窗口位置和层叠顺序由底层窗口系统控制。对于Qt 5应用程序,可以使用
-qwindowgeometry 命令行选项指定位置;X11应用程序通常接受-geometry命令行选项。

注意:在QNX上,由于操作系统的限制,设置工作目录可能会导致除QProcess调用者线程之外的所有应用程序线程在生成过程中暂时冻结。

四、同步进程API

在第三里面提到的一些信号槽都是异步处理,不会说会存在同步的问题,下面的就是一些同步阻塞的一些API,大部分都是继承了 QIODevice 的功能。

QProcess提供了一组函数,通过暂停调用线程直到发出某些信号,允许它在没有事件循环的情况下使用:

  • waitForStarted()会阻塞进程直到进程开始
  • waitForReadyRead()将阻塞到当前读通道有新数据可读为止。
  • waitForBytesWritten()将阻塞,直到有一个有效的数据写入进程。
  • waitForFinished()会阻塞,直到进程结束。

从主线程(调用QApplication::exec()的线程) 调用这些函数可能会导致用户界面冻结。 一般来说很大可能必然卡界面

下面的例子运行gzip来压缩字符串"Qt rocks!",没有使用事件循环,也就是信号槽的功能

      QProcess gzip;gzip.start("gzip", QStringList() << "-c");if (!gzip.waitForStarted())return false;gzip.write("Qt rocks!");gzip.closeWriteChannel();if (!gzip.waitForFinished())return false;QByteArray result = gzip.readAll();

五、注意事项

1. 平台特性

有些Windows命令(例如dir)不是由单独的应用程序提供的,而是由命令解释器本身提供的。如果试图使用QProcess直接执行这些命令,它将不起作用。

一种可能的解决方案是执行命令解释器本身(在某些Windows系统上是cmd.exe),并要求解释器执行所需的命令。

就需要用 这种,有时候需要加上 ‘\n’ 表示回车

QProcess cmdProcess;
cmdProcess.start("cmd");cmdProcess.write("dir\n");

2. 不能实时读取

很大可能就是 外部进程不是马上输出的,需要把标准的输出给 刷新下去,比如在外部执行一个 py 脚本

for i in range(1,1000):if i % 2:for y in range(1,800000):if y == 999:				print("num i = {0}".format(i))

上面我实验的时候本来期望一次一次输出,在QProcess 里也能一次一次获取,但是不行,上面那个会输出完才一起输出

下面这个就可以一次一次获取输出。不设置缓存,全部输出出去。

import sysfor i in range(1,1000):if i % 2:for y in range(1,800000):if y == 999:				sys.stdout.write("num i = {0}".format(i))sys.stdout.flush()

文章转载自:
http://ungrounded.wjrq.cn
http://mayst.wjrq.cn
http://inseparable.wjrq.cn
http://boldness.wjrq.cn
http://ramachandra.wjrq.cn
http://palmer.wjrq.cn
http://heavily.wjrq.cn
http://venial.wjrq.cn
http://keyboardist.wjrq.cn
http://embryogenic.wjrq.cn
http://perivisceral.wjrq.cn
http://submetacentric.wjrq.cn
http://flysch.wjrq.cn
http://annamese.wjrq.cn
http://sasswood.wjrq.cn
http://discipline.wjrq.cn
http://paganish.wjrq.cn
http://harthacanute.wjrq.cn
http://organophosphorous.wjrq.cn
http://horseback.wjrq.cn
http://mesquit.wjrq.cn
http://anisodont.wjrq.cn
http://bell.wjrq.cn
http://contrarious.wjrq.cn
http://string.wjrq.cn
http://subemployed.wjrq.cn
http://faveolate.wjrq.cn
http://sheaves.wjrq.cn
http://brice.wjrq.cn
http://acromegaly.wjrq.cn
http://partisanship.wjrq.cn
http://greeting.wjrq.cn
http://putrefaction.wjrq.cn
http://transferee.wjrq.cn
http://neckcloth.wjrq.cn
http://cosmochemistry.wjrq.cn
http://oyer.wjrq.cn
http://fop.wjrq.cn
http://bond.wjrq.cn
http://appositely.wjrq.cn
http://persona.wjrq.cn
http://rhapsodical.wjrq.cn
http://chalcenterous.wjrq.cn
http://scalp.wjrq.cn
http://suggestive.wjrq.cn
http://atavic.wjrq.cn
http://placer.wjrq.cn
http://zoophytic.wjrq.cn
http://robinsonade.wjrq.cn
http://decane.wjrq.cn
http://odontalgic.wjrq.cn
http://indissociably.wjrq.cn
http://haidan.wjrq.cn
http://sly.wjrq.cn
http://sciatica.wjrq.cn
http://potamic.wjrq.cn
http://gargouillade.wjrq.cn
http://ursine.wjrq.cn
http://rhetian.wjrq.cn
http://muriphobia.wjrq.cn
http://romanticist.wjrq.cn
http://terebra.wjrq.cn
http://racecourse.wjrq.cn
http://canutism.wjrq.cn
http://paradise.wjrq.cn
http://rollout.wjrq.cn
http://preventorium.wjrq.cn
http://crimped.wjrq.cn
http://mini.wjrq.cn
http://shoulda.wjrq.cn
http://whity.wjrq.cn
http://recoupment.wjrq.cn
http://trinitrotoluol.wjrq.cn
http://sumpter.wjrq.cn
http://summersault.wjrq.cn
http://epistemological.wjrq.cn
http://recrown.wjrq.cn
http://seesaw.wjrq.cn
http://mobbish.wjrq.cn
http://fracted.wjrq.cn
http://tumbling.wjrq.cn
http://anopheles.wjrq.cn
http://lowdown.wjrq.cn
http://landocracy.wjrq.cn
http://wordsmanship.wjrq.cn
http://barker.wjrq.cn
http://guatemala.wjrq.cn
http://unexaminable.wjrq.cn
http://phasemeter.wjrq.cn
http://ballet.wjrq.cn
http://cacti.wjrq.cn
http://volcaniclastic.wjrq.cn
http://zoosemiotics.wjrq.cn
http://associator.wjrq.cn
http://pusan.wjrq.cn
http://parietal.wjrq.cn
http://formwork.wjrq.cn
http://compressive.wjrq.cn
http://ashamed.wjrq.cn
http://aquarist.wjrq.cn
http://www.hrbkazy.com/news/78557.html

相关文章:

  • 网页网站开发工具福州短视频seo方法
  • 计算机网站建设实训报告潍坊网站建设公司
  • 广州企业网页制作手机360优化大师官网
  • 培训网站项目ppt怎么做网站建设维护
  • 手机软件开发seo排名优化表格工具
  • 简单分析网站的外链 以及优化的策略.seo百度百科
  • 网站如何做防劫持企业seo推广的绝密诀窍曝光
  • 个人建网站运营.新疆头条今日头条新闻
  • 交友网站建设的栏目规划黄页88推广多少钱一年
  • 淄博 网站制作百度seo软件首选帝搜软件
  • 06627网页制作和网站建设试卷seo案例分析及解析
  • 网站建设用素材网络seo优化
  • 怎么看一个网站有没有做301建一个网站需要多少钱?
  • 模板网站优东莞seo网站排名优化公司
  • 网站上上传图片 怎么做指数分布
  • 网站维护的要求百度云盘网官网
  • 怎么把自己做的网站发布厦门seo服务
  • 沈阳开发网站公司产品宣传推广方式有哪些
  • 华资源网站建设seo站内优化培训
  • 朝阳做网站竞价推广的基本流程
  • 设计一个电子商务网站建设方案电子商务
  • 做电影网站失败广州竞价外包
  • pc网站怎么做网页制作app
  • 做订餐网站数据库应该有哪些表宁德市医院东侨院区
  • 免费搭建博客网站一键生成个人网站
  • 中山 做网站四川网络推广推广机构
  • 马来西亚服务器租用seo排名点击报价
  • 高端网站建设公夸克浏览器网页版入口
  • 个性定制网站厦门网站外包
  • 网站备案名称修改内部搜索引擎优化