QT新建进程 QProcess
2017-03-21 09:09
113 查看
Qt QProcess
作为几乎对C++进行语言级别改变的框架Qt,进行了与Cocoa类似的封装,对了,其实感觉Qt对C++从语言特性的改变 上来说类似于Cocoa对于Objective C的改变,不同的是Qt没能统治C++世界。
Test1:
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main(int argc,char *argv[])
{
QString program = "cat";
QStringList arguments;
arguments <<"a" <<"b";
QProcess *myProcess = new QProcess();
myProcess->start(program, arguments);
myProcess->waitForFinished();
QByteArray output = myProcess->readAllStandardOutput();
printf("%s", (constchar*)output);
return0;
}
QProcess就是Qt封装的进程类,需要特别说明的此类使用上在Qt4与Qt3是不同的。并且,有个问题是因为Qt现在几乎已经是纯面向GUI的界面库了,所以QProcess默认是进行命令行不输出的,这里转了个弯,先读出了输出,然后用printf输出了。
Test2:
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main(int argc,char *argv[])
{
QString program = "cat";
QStringList arguments;
arguments <<"a" <<"b";
QProcess *myProcess = new QProcess();
myProcess->setStandardOutputFile("c");
myProcess->start(program, arguments);
myProcess->waitForFinished();
return0;
}
但是看了示例,什么感觉?个人感觉Qt不愧是专门做API的,靠API吃饭的与靠卖硬件为生的公司就是不一样,API的设计实 在是恰到好处,简介简练,并且,最重要的是,够用!
Test3:
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main(int argc,char *argv[])
{
QString program = "/bin/cat";
QStringList arguments;
arguments <<"a" <<"b";
QProcess *myProcess = new QProcess();
QProcess *outProcess = new QProcess();
myProcess->setStandardOutputProcess(outProcess);
myProcess->start(program, arguments);
outProcess->start(program);
myProcess->waitForFinished();
outProcess->waitForFinished();
QByteArray output = outProcess->readAllStandardOutput();
printf("%s", (constchar*)output);
return0;
}
总体上而言,Qt没有设计pipe对应的类,但是,对于一个函数可以解决的任务来说,很明显使用起来是更加简单的,像Cocoa那样,对这么简单的概念都进行相应的封装,其实有过度设计之嫌。。。。其实NSPipe也就2,3个函数,而且,如此例所示,其实,除了一个有 用外,NSPipe多出的那么几个都是因为多了NSPipe才出现的函数。。。。。悲哀中。。。。
作为几乎对C++进行语言级别改变的框架Qt,进行了与Cocoa类似的封装,对了,其实感觉Qt对C++从语言特性的改变 上来说类似于Cocoa对于Objective C的改变,不同的是Qt没能统治C++世界。
Test1:
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main(int argc,char *argv[])
{
QString program = "cat";
QStringList arguments;
arguments <<"a" <<"b";
QProcess *myProcess = new QProcess();
myProcess->start(program, arguments);
myProcess->waitForFinished();
QByteArray output = myProcess->readAllStandardOutput();
printf("%s", (constchar*)output);
return0;
}
QProcess就是Qt封装的进程类,需要特别说明的此类使用上在Qt4与Qt3是不同的。并且,有个问题是因为Qt现在几乎已经是纯面向GUI的界面库了,所以QProcess默认是进行命令行不输出的,这里转了个弯,先读出了输出,然后用printf输出了。
Test2:
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main(int argc,char *argv[])
{
QString program = "cat";
QStringList arguments;
arguments <<"a" <<"b";
QProcess *myProcess = new QProcess();
myProcess->setStandardOutputFile("c");
myProcess->start(program, arguments);
myProcess->waitForFinished();
return0;
}
但是看了示例,什么感觉?个人感觉Qt不愧是专门做API的,靠API吃饭的与靠卖硬件为生的公司就是不一样,API的设计实 在是恰到好处,简介简练,并且,最重要的是,够用!
Test3:
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main(int argc,char *argv[])
{
QString program = "/bin/cat";
QStringList arguments;
arguments <<"a" <<"b";
QProcess *myProcess = new QProcess();
QProcess *outProcess = new QProcess();
myProcess->setStandardOutputProcess(outProcess);
myProcess->start(program, arguments);
outProcess->start(program);
myProcess->waitForFinished();
outProcess->waitForFinished();
QByteArray output = outProcess->readAllStandardOutput();
printf("%s", (constchar*)output);
return0;
}
总体上而言,Qt没有设计pipe对应的类,但是,对于一个函数可以解决的任务来说,很明显使用起来是更加简单的,像Cocoa那样,对这么简单的概念都进行相应的封装,其实有过度设计之嫌。。。。其实NSPipe也就2,3个函数,而且,如此例所示,其实,除了一个有 用外,NSPipe多出的那么几个都是因为多了NSPipe才出现的函数。。。。。悲哀中。。。。
总表
使用方式/代码量 | Test1 | Test2 | Test3 |
SHELL | 单 行5字符 | 单行7字符 | 单行9字符 |
C Runtime Library's system | 5行 | 5行 | 5行 |
Python's os.system | 2行 | 2行 | 2行 |
Win32 API WinExec/ShellExecute | 6行 | 6行 | type限制 |
Win32 API CreateProcess | 16行 | 16行 | type限制 |
Objective C With Cocoa | 15行 | 23行 | 23行 |
Qt QProcess | 16行 | 15行 | 20行 |
相关文章推荐
- Qt 进程 QProcess
- Qt进程QProcess相关
- Qt 进程 QProcess
- QT新建进程
- qt环境程序中通过QProcess启动进程的方式启动windows系统自带的画图程序中遇到的错误
- 无法关闭的QT程序(覆盖closeEvent,新建QProcess并脱离关系)
- QT编译时 cc1plus进程占用大量内存卡死问题解决
- QT cmd判断进程是否存在 获取进程信息 关闭进程
- QT4.8.5+qt-vs-addin-1.1.11+VS2010安装配置和QT工程的新建和加载
- qt 监听linux下进程的CPU使用率和内存使用率
- qt调win做的一些 搜索进程关闭窗口 还有关机的繁杂东西
- qt新进程工作目录的设置(工作目录确实是被子进程继承的,但也可以设置)
- QT中使用QProcess启用外部程序
- Qt中使用QProcess启动外部程序和关闭外部程序
- Qt_Qtopia与Android的进程间通讯方式
- VS2010里新建Qt项目库路径
- Qt 新建线程的方法
- QT的内部进程通信
- Qt运行一个实例进程
- QT 进程基础(一) QT如何判断另外一个进程在运行