QProcess 进程类—调用外部程序
- QObject *parent;
- QString program = "tar"
- QStringList arguments;
- arguments << "czvf" << "backup.tar.gz" << "/home";
- QProcess *myProcess = new QProcess(parent);
- QProcess->start(program, arguments);
描述
调用waitFor()类型的函数
进程的标准输出:
- #include <QApplication>
- #include <QProcess>
- #include <QString>
- #include <iostream>
- 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())
- {
- std::cout << "结束失败\n";
- return 1;
- }
- // 读取进程输出到控制台的数据
- procOutput = proc.readAll();
- // 输出读到的数据
- std::cout << procOutput.data() << std::endl;
- // 返回
- return EXIT_SUCCESS;
- }
- <pre name="code" class="cpp"><pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- </pre>
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QProcess>
- #include <QWidget>
- namespace Ui {
- class Widget;
- }
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
- private:
- Ui::Widget *ui;
- QProcess *pro;//创建一个进程对象
- QString out;
- private slots:
- void on_pushButton_clicked();//运行按钮槽
- void readOutput();//从进程中读取数据槽
- };
- #endif // WIDGET_H
"widget.cpp"源文件
- #include "widget.h"
- #include "ui_widget.h"
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- this->pro = new QProcess;
- this->setWindowFlags(Qt::WindowMinimizeButtonHint);
- QObject::connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(on_pushButton_clicked()));
- //对ui->lineEdit进行信号和槽连接,光标在ui->lineEdit内时按回车键,达到同点击运行按钮一样的效果
- QObject::connect(pro,SIGNAL(readyRead()),this,SLOT(readOutput()));
- //当准备从进程里读取数据的时候触发输出数据的槽
- }
- Widget::~Widget()
- {
- delete ui;
- }
- void Widget::on_pushButton_clicked()
- {
- QString cmd = ui->lineEdit->text();
- pro->start(cmd);
- out = tr("");
- ui->textEdit->setText(out);
- }
- void Widget::readOutput()
- {
- out += pro->readAll();
- ui->textEdit->setText(out);
- }
"main.cpp"源文件
- #include <QtGui/QApplication>
- #include "widget.h"
- #include <QTextCodec>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
- QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
- Widget w;
- w.show();
- return a.exec();
- }
哦,这个案例的界面是我用Qt Designer拖出来的,所以没有代码部分。请大家借助下面的效果图查看源码。
再给大家展示上运行的效果图:

QProcess 进程类—调用外部程序的更多相关文章
- C#使用Process类调用外部程序(转)
在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程.一.启动进程实例 Process myProc ...
- C#Process调用外部程序
前言 使用C#调用外部程序,一种是通过Process类,一种是通过命令行,本文主要说一下使用C#中的Process类调用外部程序的方式. 过程: 1. 创建Process对象 2. 配置启动选项(输入 ...
- QProcess调用外部程序方式的差异
众所周知QProcess类的作用是启动一个外部的程序并与之交互它有三种方式调用外部程序: 1. execute 2. start 3. startDetached 从调用上看: execute是阻塞调 ...
- PowerShell中调用外部程序和进程操作命令例子
学习PowerShell,我们不指望通过C#编程去搞定所有事情,我们应该记住cmd.exe或者说批处理给我们留下的宝贵财富——通过调用外部程序去解决问题.调用了外部程序,势必就要对进程进行管理,这就是 ...
- 并发、并行、同步、异步、全局解释锁GIL、同步锁Lock、死锁、递归锁、同步对象/条件、信号量、队列、生产者消费者、多进程模块、进程的调用、Process类、
并发:是指系统具有处理多个任务/动作的能力. 并行:是指系统具有同时处理多个任务/动作的能力. 并行是并发的子集. 同步:当进程执行到一个IO(等待外部数据)的时候. 异步:当进程执行到一个IO不等到 ...
- JAVA中调用外部程序,并等待其退出(涉及Runtime和ProcessBuilder)
这段时间要写一个java调用外部程序的功能,踩了几个坑,这里分享一下. 首先用的是RunTime,调用代码如下: Process pro = Runtime.getRuntime().exec(&qu ...
- Delphi 调用外部程序并等待其运行结束
转自:http://blog.csdn.net/xieyunc/article/details/4140620 如何让Delphi调用外部程序并等待其运行结束 1. uses Window ...
- Wayland中的跨进程过程调用浅析
原文地址:http://blog.csdn.net/jinzhuojun/article/details/40264449 Wayland协议主要提供了Client端应用与Server端Composi ...
- C# 使用Process调用外部程序中所遇到的参数问题
在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载: // // 摘要: // 启动由包含进程启动信息(例如,要启动的进程 ...
随机推荐
- uva 12356 Army Buddies
简单的并查集应用. #include<stdio.h> #include<string.h> #include<math.h> #include<algori ...
- 《Windows编程循序渐进》——建立MFC应用程序
如何建立MFC应用程序 打开VS2013:
- String类之indexOf--->查找某字对应的位置
以下方法都是java内置类String类的内置方法(不是构造方法哦,就是普通的方法),不需要我们写,直接拿过来用即可. indexOf方法对应Api介绍 lastIndexOf方法对应Api介绍 -- ...
- PAT 团体程序设计天梯赛-练习集 L1-008. 求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和. 输入格式: 输入在一行中给出2个整数A和B,其中-100<=A<=B<=100,其间以空格分隔. 输出格式: 首先顺序输出 ...
- PHP验证码程序
[摘自网络,参考学习] <?php/** * vCode(m,n,x,y) m个数字 显示大小为n 边宽x 边高y * http://blog.qita.in * 自己改写记录session $ ...
- ESFramework 4.0 性能测试
本实验用于测试ESFramework服务端引擎的性能,测试程序使用ESFramework 4.0版本. 一.准备工作 测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端. 作为服务器 ...
- CreateCompatibleBitmap 需要注意的问题
不要使用CreateCompatibleDC得到的内存DC作为其参数,应使用真实DC,否则图片不能显示
- web通知
<html> <head> <title>桌面通知</title> <meta name="description" cont ...
- css3部分属性兼容性别扭写法(因为很多我就叫他别扭了,希望全面早早支持css3吧)
/*圆角class,需要设置圆角的元素加上class名称*/ .roundedCorners{ -webkit-border-radius: 10px;/*webkit内核浏览器*/ -moz-bor ...
- NOIP2010-普及组复赛模拟试题-第二题-数字积木
题目描述 Description 小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢?你的任务就是读入 n 个数字积木,求出所能形成的最大数 ...