【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
最后执行结果:
转载于:https://www.cnblogs.com/kernel0815/p/3923608.html
【Qt】使用QProcess调用其它程序或脚本相关推荐
- python调用其他程序或脚本方法(转)
python运行(调用)其他程序或脚本 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地 ...
- QT中QProcess调用命令行的痛苦经历
在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了 ...
- Qt用QProcess调用exe的简单方法
Qt调用exe的简单方法: 1.找到exe的路径(注意,路径最好全是英文,无空格) 2.调用此exe 简单启动: QProcess pro; 1.带参数(参数具体意义请百度) pro.startDet ...
- qprocess终止其它程序
在qt代码里有时需要qprocess调用第三方程序,调用完后需要终止.手动叉掉不合适.此时可以调用window下的taskkill程序关闭该程序 QProcess process; process.e ...
- 在linux系统中自定义协议,让浏览器可以调用本地程序
备注: 以下适用于在kde桌面环境下(同样适用于centos7),包括统信UOS.Ubuntu系统, 步骤一: 新建一个demo.desktop,demo为协议名称内容如下: [Desktop Ent ...
- Linux qt程序打包依赖库,Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)...
本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...
- Qt工作笔记-使用Qt中QProcess与iostream中system调用外部进程
目录 基础概念 演示 基础概念 Qt中的QProcess类可以调用外部程序! 同时iostream有个函数system也可以调用外部程序!这个system也是Windows,Linux上通用的 演示 ...
- java 调用casperjs_Java程序去调用并执行shell脚本及问题总结(推荐)
摘要: 该文章来自阿里巴巴技术协会(ATA)精选集 背景 我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发. java开发的特点就是我们可以很早地进行TDDL, ME ...
- 嵌入式成长轨迹34 【嵌入式学习阶段】【ARM环境调试】【QT 移植环境及简单程序示例】---补充《ok6410 Qt移植百科全书》...
更新版 http://www.cnblogs.com/zeedmood/archive/2012/12/08/2808393.html 书上提及的有这些,分别说明下,里边打*可以不弄: Tslib ...
最新文章
- Linux下root修改密码报错解决方案
- boost::math::geometric相关用法的测试程序
- Pad和Margin
- set()与get()详细解答(C#)
- C#的dapper使用
- ASP.NET技巧(收集)
- svd奇异值分解_传统推荐算法(一)SVD推荐(1)解读奇异值分解
- Android doc |Getting Started|部分 部分译文 --Building Your First App
- 室内三维地图编辑器,制作地图软件哪个最好
- matlab 离散系统稳定性,基于LMI的离散系统非脆弱H∞滤波器设计(Matlab,程序)
- 遇害的中国留美博士生,被追授博士学位!导师帮他完成了学业!
- 第三章 迭代器(iterators)概念与traits编程技法
- uniapp-商品详情配置
- 压缩软件如何删除压缩包密码(zip、rar、7-zip),忘记密码如何删除密码?
- 2020icpc小米决赛K
- 蕴含命题遇到的疑惑和解答
- Mybatis 批量操作8种实现总结
- 3D检测论文阅读简记
- TEC控温模块电路分析
- 提高网站打开速度的7大秘诀
热门文章
- Kotlin入门(21)活动页面的跳转处理
- 频率法:数组排序的另一种思路
- qvalue: Check that you have valid p-values or use a different range of lambda
- Spring零配置之@Configuration注解详解。
- sql server 2008安装图解
- 大数据的5个“小观点 ”(转)
- 字节流通向字符流的桥梁:InputStreamReader
- JAVA泛型详解2 转载
- 【转】c++各种数据类型所占存储空间大小
- 云消防大数据_消防云大数据