【Qt】使用QProcess调用其它程序或脚本

大概试了一下,还是不错的,不过字符编码问题还不太好解决:

代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QProcess>
#include <QTextCodec>
#include <QCloseEvent>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QTextCodec::setCodecForLocale(QTextCodec::codecForName("KOI8-R"));ui->progressBar->setValue(0);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{process = new QProcess(this);QStringList str;str << "";if (ui->pushButton->text() == "stop"){process->write("quit");process->kill();return;}QString exe = QApplication::applicationDirPath().append("/test.bat");connect(process, SIGNAL(started()), this, SLOT(start_process()));connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(start_read_output()));connect(process, SIGNAL(readyReadStandardError()), this, SLOT(start_read_err_output()));connect(process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finish_process(int, QProcess::ExitStatus)));process->start(exe);if (false == process->waitForStarted()){ui->textBrowser->append("this process can not be called.");}ui->pushButton->setText("stop");
}void MainWindow::start_process()
{ui->progressBar->setVisible(true);ui->progressBar->setValue(0);//QMessageBox::information(this, "ok", "ok", QMessageBox::Ok);ui->textBrowser->append(tr("process start"));
}void MainWindow::finish_process(int exitCode, QProcess::ExitStatus exitStatus)
{if (exitStatus == QProcess::NormalExit){ui->textBrowser->append(tr("process exit normal"));}else{ui->textBrowser->append(tr("process exit crash"));}ui->progressBar->setValue(100);ui->textBrowser->append("process finised");ui->pushButton->setText("ok");
}void MainWindow::start_read_output()
{QByteArray ba = process->readAllStandardOutput();ui->textBrowser->append(ba);
}void MainWindow::start_read_err_output()
{QByteArray ba = process->readAllStandardError();ui->textBrowser->append("error: " + ba);
}void MainWindow::closeEvent(QCloseEvent *event)
{process->write("quit");process->kill();if(!process->waitForFinished(100))return;event->accept();
}

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QProcess>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();QProcess* process;protected:void closeEvent(QCloseEvent *);private slots:void on_pushButton_clicked();void start_process();void start_read_output();void start_read_err_output();void finish_process(int exitCode, QProcess::ExitStatus exitStatus);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

最后执行结果:

posted on 2014-08-20 00:27 kernel_main 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/kernel0815/p/3923608.html

【Qt】使用QProcess调用其它程序或脚本相关推荐

  1. python调用其他程序或脚本方法(转)

    python运行(调用)其他程序或脚本 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地 ...

  2. QT中QProcess调用命令行的痛苦经历

    在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了 ...

  3. Qt用QProcess调用exe的简单方法

    Qt调用exe的简单方法: 1.找到exe的路径(注意,路径最好全是英文,无空格) 2.调用此exe 简单启动: QProcess pro; 1.带参数(参数具体意义请百度) pro.startDet ...

  4. qprocess终止其它程序

    在qt代码里有时需要qprocess调用第三方程序,调用完后需要终止.手动叉掉不合适.此时可以调用window下的taskkill程序关闭该程序 QProcess process; process.e ...

  5. 在linux系统中自定义协议,让浏览器可以调用本地程序

    备注: 以下适用于在kde桌面环境下(同样适用于centos7),包括统信UOS.Ubuntu系统, 步骤一: 新建一个demo.desktop,demo为协议名称内容如下: [Desktop Ent ...

  6. Linux qt程序打包依赖库,Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)...

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

  7. Qt工作笔记-使用Qt中QProcess与iostream中system调用外部进程

    目录 基础概念 演示 基础概念 Qt中的QProcess类可以调用外部程序! 同时iostream有个函数system也可以调用外部程序!这个system也是Windows,Linux上通用的 演示 ...

  8. java 调用casperjs_Java程序去调用并执行shell脚本及问题总结(推荐)

    摘要: 该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发. java开发的特点就是我们可以很早地进行TDDL, ME ...

  9. 嵌入式成长轨迹34 【嵌入式学习阶段】【ARM环境调试】【QT 移植环境及简单程序示例】---补充《ok6410 Qt移植百科全书》...

    更新版 http://www.cnblogs.com/zeedmood/archive/2012/12/08/2808393.html 书上提及的有这些,分别说明下,里边打*可以不弄:   Tslib ...

最新文章

  1. Linux下root修改密码报错解决方案
  2. boost::math::geometric相关用法的测试程序
  3. Pad和Margin
  4. set()与get()详细解答(C#)
  5. C#的dapper使用
  6. ASP.NET技巧(收集)
  7. svd奇异值分解_传统推荐算法(一)SVD推荐(1)解读奇异值分解
  8. Android doc |Getting Started|部分 部分译文 --Building Your First App
  9. 室内三维地图编辑器,制作地图软件哪个最好
  10. matlab 离散系统稳定性,基于LMI的离散系统非脆弱H∞滤波器设计(Matlab,程序)
  11. 遇害的中国留美博士生,被追授博士学位!导师帮他完成了学业!
  12. 第三章 迭代器(iterators)概念与traits编程技法
  13. uniapp-商品详情配置
  14. 压缩软件如何删除压缩包密码(zip、rar、7-zip),忘记密码如何删除密码?
  15. 2020icpc小米决赛K
  16. 蕴含命题遇到的疑惑和解答
  17. Mybatis 批量操作8种实现总结
  18. 3D检测论文阅读简记
  19. TEC控温模块电路分析
  20. 提高网站打开速度的7大秘诀

热门文章

  1. Kotlin入门(21)活动页面的跳转处理
  2. 频率法:数组排序的另一种思路
  3. qvalue: Check that you have valid p-values or use a different range of lambda
  4. Spring零配置之@Configuration注解详解。
  5. sql server 2008安装图解
  6. 大数据的5个“小观点 ”(转)
  7. 字节流通向字符流的桥梁:InputStreamReader
  8. JAVA泛型详解2 转载
  9. 【转】c++各种数据类型所占存储空间大小
  10. 云消防大数据_消防云大数据