Qt之启动外部程序
简述
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");
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") << "22";
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");
其它参数类似。
QProcess process;
process.start("del /s *.txt");
//等同于process.start("del", QStringList() << "/s" << "*.txt");
获取环境变量
返回调用进程的环境变量作为一个键值对列表。
QStringList environment = QProcess::systemEnvironment();
//environment = {"PATH=/usr/bin:/usr/local/bin", "USER=greg", "HOME=/home/greg"}
Qt之启动外部程序的更多相关文章
- 【Qt】Qt之启动外部程序【转】
简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...
- Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)
简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...
- Qt之启动外部程序(调用cmd.exe ping putty winscp 管道等等,比较牛叉)
http://blog.csdn.net/u011012932/article/details/50478833
- C# 启动外部程序的几种方法
. 启动外部程序,不等待其退出. . 启动外部程序,等待其退出. . 启动外部程序,无限等待其退出. . 启动外部程序,通过事件监视其退出. // using System.Diagnostics; ...
- QSplashScreen类实现Qt程序启动画面
QSplashScreen类实现Qt程序启动画面 收藏人:zwsj 2013-09-13 | 阅:569 转:6 | 来源 | 分享 程序启动 ...
- qt程序启动播放动画
qt程序启动播放动画 编辑删除转载 2016-01-20 10:23:11 标签:qt启动动画 1.播放动画 QAxWidget *flash = , ); //QAxWidget使用的是Active ...
- C# 启动外部程序的几种常用方法汇总
. 启动外部程序,不等待其退出. . 启动外部程序,等待其退出. . 启动外部程序,无限等待其退出. . 启动外部程序,通过事件监视其退出. 实现代码如下: // using System.Diagn ...
- [C#]做服务使用Process启动外部程序没窗体
这几天会到一个需要,要时时侦测文件生成,并上传到Server上,侦测文件生成使用的FileSystemWatch.但是时时运行遇到了问题,程序可能会人为退出或者意外终止,使用一个进程监控程序的监程,也 ...
- [C#.Net]启动外部程序的几种常用方法汇总
本文汇总了C#启动外部程序的几种常用方法,非常具有实用价值,主要包括如下几种方法: 1. 启动外部程序,不等待其退出. 2. 启动外部程序,等待其退出. 3. 启动外部程序,无限等待其退出. 4. 启 ...
随机推荐
- iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述
本文档尝试用Video Toolbox进行H.265(HEVC)硬件编码,视频源为iPhone后置摄像头.去年做完硬解H.264,没做编码,技能上感觉有些缺失.正好刚才发现CMFormatDescri ...
- JDBC 学习笔记(一)—— 基础知识 + 分页技术
本文目录: 1.JDBC简介 2.使用JDBC的步骤——第一个JDBC程序 3.DriverManager ——加载数据库驱动 4.数据库URL ——标识数据库的 ...
- shell dev null 是什么
1:在不想把标准输出和标准出错信息输出到控制台,也不想重定向到文件时经常使用 2:不能忽略其读入功能.从/dev/null读入时都是0 3:系统的垃圾桶,类似于Windows的回收站,不同的是这个设备 ...
- 把工程部署在tomcat的root路径下
myeclipse可以右键工程:(eclipse也可以)选择properties->myeclipse->web:把web context-root改成:/然后在用myeclipse部署项 ...
- Java多线程——<二>将任务交给线程,线程声明及启动
一.任务和线程 <thinking in java>中专门有一小节中对线程和任务两个概念进行了具体的区分,这也恰好说明任务和线程是有区别的. 正如前文所提到的,任务只是一段代码,一段要达成 ...
- [转载]C# 多线程、控制线程数提高循环输出效率
C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...
- UNIX command Questions Answers asked in Interview
UNIX or Linux operating system has become default Server operating system and for whichever programm ...
- qsort()与besearch()
功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void ...
- D&F学数据结构系列——二叉堆
二叉堆(binary heap) 二叉堆数据结构是一种数组对象,它可以被视为一棵完全二叉树.同二叉查找树一样,堆也有两个性质,即结构性和堆序性.对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿 ...
- SDK 与MFC
SDK 就是Software Development Kit 软件开发包MFC 就是Microsoft Foundation Classes 微软函数类库.是以C++类的形式封装了Windows的AP ...