Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)
简述
QProcess可以用来启动外部程序,并与它们交互。
要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。
另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。
接口
start() 启动外部程序
readAllStandardError() 从标准错误中获取所有数据
readAllStandardOutput() 从标准输出中获取所有数据
write() 继承于QIODevice
close() 继承于QIODevice
除此之外,QProcess还包含静态成员函数:
execute() 启动一个进程,然后等待该进程结束。
startDetached() 启动一个进程,然后使其和当前进程脱离进程的父子关系。
示例
cmd
启动cmd
QProcess process(this);
process.startDetached("cmd.exe");
- 1
- 2
cmd带参数
使用cmd来删除本地文件
QProcess process(this);
process.start("cmd.exe");
process.write ("del E:\\a.txt\n\r");
process.write ("exit\n\r");
process.waitForFinished();
process.close();
cmd获取返回值
使用cmd来查看网络状况
QStringList arguments;
arguments << "/c" << "ping www.baidu.com";
QProcess process(this);
process.start("cmd.exe", arguments);
process.waitForStarted();
process.waitForFinished();
QString strResult = QString::fromLocal8Bit(process.readAllStandardOutput());
QMessageBox msgBox(this);
msgBox.setText(strResult);
msgBox.exec();
putty远程登录
QString program = "E:/Putty.exe";
QStringList arguments;
arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73");
QProcess *process = new QProcess(this);
process->setProcessChannelMode(QProcess::SeparateChannels);
process->setReadChannel(QProcess::StandardOutput);
process->start(program, arguments, QIODevice::ReadWrite);
WinSCP远程文件传输
QString program = QCoreApplication::applicationDirPath() + "/WinSCP/WinSCP.exe";
QStringList arguments;
arguments << QString("%1:%2@%3:%4").arg("root").arg("wang").arg("172.18.5.73").arg(22);
QProcess *process = new QProcess(this);
process->setProcessChannelMode(QProcess::SeparateChannels);
process->setReadChannel(QProcess::StandardOutput);
process->start(program, arguments, QIODevice::ReadWrite);
管道
一个进程的标准输出流到目标进程的标准输入。
command1 | command2
可以用下面代码实现:
QProcess process1;
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("command1");
process2.start("command2");
错误处理
启动外部程序,当发生错误时,可以根据指定的错误描述所发生的错误类型。
connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError))); void processError(QProcess::ProcessError error)假设不存在对应的外部程序,则会返回错误类型
{
switch(error)
{
case QProcess::FailedToStart:
QMessageBox::information(0, "Tip", "FailedToStart");
break;
case QProcess::Crashed:
QMessageBox::information(0, "Tip", "Crashed");
break;
case QProcess::Timedout:
QMessageBox::information(0, "Tip", "Timedout");
break;
case QProcess::WriteError:
QMessageBox::information(0, "Tip", "WriteError");
break;
case QProcess::ReadError:
QMessageBox::information(0, "Tip", "ReadError");
break;
case QProcess::UnknownError:
QMessageBox::information(0, "Tip", "UnknownError");
break;
default:
QMessageBox::information(0, "Tip", "UnknownError");
break;
}
}QProcess::FailedToStart。
参数arguments
以putty远程登录为例,putty可以使用命令行putty [-pw password] user@ip来进行连接。
所以中间为空格的地方使用arguments进行单个字符串分离:
QStringList arguments;
arguments<< "-pw" << "wang" << QString("%1@%2").arg("root").arg("172.18.5.73");
- 1
- 2
其它参数类似。
QProcess process;
process.start("del /s *.txt");
//等同于process.start("del", QStringList() << "/s" << "*.txt");
- 1
- 2
- 3
获取环境变量
返回调用进程的环境变量作为一个键值对列表。
QStringList environment = QProcess::systemEnvironment();
//environment = {"PATH=/usr/bin:/usr/local/bin", "USER=greg", "HOME=/home/greg"}
- 1
- 2
Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)的更多相关文章
- 【Qt】Qt之启动外部程序【转】
简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...
- Qt之启动外部程序
简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...
- Qt之启动外部程序(调用cmd.exe ping putty winscp 管道等等,比较牛叉)
http://blog.csdn.net/u011012932/article/details/50478833
- 嵌入式Qt程序启动参数-qws 不需要X11桌面系统
1 背景 通过串口终端启动arm开发板(linux系统)的Qt应用程序,提示: [root@FORLINX6410]# /opt/qt-4.7.1/demos/textedit/textedit s3 ...
- windows 服务启动外部程序
服务使用Process启动外部程序没窗体 在WinXP和Win2003环境中,安装服务后,右键单击服务“属性”-“登录”选项卡-选择“本地系统帐户”并勾选“允许服务与桌面交互”即可. 在Win7及以后 ...
- 通过Process启动外部程序
#region Process //声明一个程序类 System.Diagnostics.Process Proc; try { //声明一个程序信息类 System.Diagnostics.Proc ...
- C# 启动外部程序的几种方法
. 启动外部程序,不等待其退出. . 启动外部程序,等待其退出. . 启动外部程序,无限等待其退出. . 启动外部程序,通过事件监视其退出. // using System.Diagnostics; ...
- QSplashScreen类实现Qt程序启动画面
QSplashScreen类实现Qt程序启动画面 收藏人:zwsj 2013-09-13 | 阅:569 转:6 | 来源 | 分享 程序启动 ...
- 对Qt for Android的评价(很全面,基本已经没有问题了,网易战网客户端就是Qt quick写的),可以重用QT积累20年的RTL是好事,QML效率是HTML5的5倍
现在Qt不要光看跨平台了,Qt也有能力和原生应用进行较量的.可以直接去Qt官网查看他和那些厂商合作.关于和Java的比较,框架和Java进行比较似乎不且实际.如果是C++和Java比较,网上有很多文章 ...
随机推荐
- iOS viewController添加导航条以及返回跳转选择
给单独的viewcontroller或者在Appdelegate的主页面添加导航条,只要在viewcontroller上添加navigationcontroller,在添加此navigationcon ...
- 更换Winform 皮肤(下)----完全GDI+绘制
skin皮肤和DLL程序及文件:下载 链接:http://www.cnblogs.com/DebugLZQ/archive/2013/04/15/3021659.html
- VMware三种链接方式
VMware三种链接方式 第一种:桥接Bridged 如其的说明:connected directly to the physical networkà直接连接到物理网络.如果是通过路由器连接出来的D ...
- winform之2---messagebox用法
MessageBox.Show();可谓是winform开发中用的次数最多的东东啦.先贴一张msdn的图解 msdn好像没有更新哎,只提供了这几种方法,并且参数名称和最新的有差别,但实际上messag ...
- 闲扯 Javascript 04 滚动条
物体运动基础 让Div移动起来 offsetLeft的作用 用定时器让物体连续移动 效果原理 让ul一直向左移动 复制li innerHTML和+= 修改ul的width 滚动过界后,重设位置 判断过 ...
- Homebrew 1.0.0 发布,MacOS 上的包管理器
神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0
- FireMonkey下的异形窗体拖动(句柄转换)
DelphiXE2 Firemoney FMX 的窗体不只是为windows的, 所以很多功能都没有了. 最常见的就是拖拽了 先看 VCL时代 一个经典拖动代码 ReleaseCapture(); S ...
- 京东金融集团BD部门招聘 BD经理
新标签页http://74.55.154.136/ 互联网招聘_cnBeta.COM 北京 / 全职 / 20k-30k / 经验3-5年 / 本科及以上 / 1天前发布 职位诱惑 : 五险一金 职位 ...
- 简单的方式实现javascript 小数取整
JS: function truncateNumber(n){ return n|0; } 測试: console.log(truncateNumber(12.345)); 浏览器打印出12
- stm32智能小车之路之小车启动
首先.安装完小车后最激动的还是想让他跑动,那么就開始吧.写个简单的程序測试下电机是否正常.打开keil软件新建一个project,详细简历keilproject不会的请百度.或者call ...