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

代码:

#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();
} 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();
//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();
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())
return;
event->accept();
}

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QProcess> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~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

最后执行结果:

【Qt】使用QProcess调用其它程序或脚本的更多相关文章

  1. QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)

    QT中QProcess调用命令行的痛苦经历   阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...

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

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

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

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

  4. Qt 中用QProcess调用cmd命令

    项目做到一定阶段,常常须要在原来的project上调用外部程序. Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信. 基本用法: QProcess p(0); ...

  5. qt 程序中执行额外程序和脚本

    1.最简单的,我们可以通过system直接启动一个应用程序或者脚本:(但是要调用 #include <stdlib.h>) system("./helloworld") ...

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

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

  7. windows下Qt Creator5.1.0编写程序以及调用OpenCV库

    系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...

  8. Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本

    Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能 比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用 或者写个脚本,apk中直接调用,省去中间 ...

  9. QT学习之第一个程序

    QT学习之第一个程序 目录 手动创建主窗口 居中显示 添加窗口图标 显示提示文本 Message Box的应用 手动连接信号与槽 手动创建主窗口 窗口类型 QMainWindow: 可以包含菜单栏.工 ...

随机推荐

  1. Chrome每次打開都要打開123.sogou.com

    剛開始還以為中毒了,又是殺毒又是掃描的,最後發覺,原來就是chrome的一個設置被改了. Chrome->設置->啟動時 : 選打开特定网页或一组网页->設置網頁 , 將其中的123 ...

  2. jquery源码

    null  与 undefined 都是  ==null 为true alert(typeof(123))  number alert(typeof(NAN))   打印 number 不靠谱 ale ...

  3. DevExpress打印功能 z

    一.打印功能说明: 打印功能,我们有多种实现方式,可以根据需要自行选择,我简单的总结下两种方法. (1).使用微软.net框架自带的PrintDocument,这种方式是直接借助Graphics,自行 ...

  4. python实现线程池

    线程池 简单线程池 import queue import threading import time class ThreadPool(object): #创建线程池类 def __init__(s ...

  5. CDN和DNS

    相信有很多的朋友会被这几个名词绕的有些头大,很多朋友觉得智能DNS跟双线加速.CDN加速是类似的技术.其实不然,虽然他们的目的都是一个:让用户更快的访问网站.但是他们的应用原理却大相径庭.大家一定很清 ...

  6. 内存数据库(sqlite)和 map数据结构 做缓存对比

    背景: 今天看文档时发现说android的SQLITE在创建时,如果不指定name,则会创建in-memory的数据库.且当该db被close时,才会释放. 那这样来说,完全可以用来做内存缓存嘛. 用 ...

  7. ubuntu14.04离线配置cm5.5.1

    cd /opt/cm-5.5.1/具体参考http://www.aboutyun.com/thread-10852-1-1.html 离线安装:下载所需文件 http://archive.cloude ...

  8. transform的使用

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. JAVA的JDBC连接与sql操作

    一.前言 本文主要介绍怎样连接数据库.即JDBC的操作.以MySQL为例子. 前提是首先要将驱动jar包放入对应路径中. 二.过程说明 1.加载jdbc驱动程序 <span style=&quo ...

  10. Orchard官方文档翻译(十一) 使用Tags组织文本

    原文地址:http://docs.orchardproject.net/Documentation/Organizing-content-with-tags 想要查看文档目录请用力点击这里 最近想要学 ...