【Qt】使用QProcess调用其它程序或脚本
2014-08-20 00:27
633 查看
大概试了一下,还是不错的,不过字符编码问题还不太好解决:
代码:
头文件:
最后执行结果:
代码:
#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_OBJECT public: 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
最后执行结果:
![](http://images.cnitblog.com/i/348899/201408/200026369568966.jpg)
相关文章推荐
- 【Qt】使用QProcess调用其它程序或脚本
- QT中使用Qprocess调用git程序获取版本号
- QT 使用QProcess 调用外部程序并截取输出流
- 使用Qt打开外部文件,调用外部程序(QDesktopServices,QUrl ,QProcess,QProcess)
- QT 使用QProcess 调用外部程序并截取输出流
- 使用Qprocess的startDetached()方法调用外部exe程序
- VS中使用QT调用R脚本
- 【Android】使用Intent调用系统其它程序,使用onKeyDown对音量键的监听,长按事件
- QT中调用外部程序:QProcess的使用
- QT中调用外部程序:QProcess的使用
- 使用QProcess调用另一个程序
- QT中调用外部程序:QProcess的使用
- 使用Intent调用系统其它程序打开本地各种类型的文件
- 使用bat命令或shell脚本调用java程序
- Qt调用外部程序QProcess
- qt进程编程的使用:一个程序中调用另一个程序
- QT中调用外部程序:QProcess的使用
- qt调用外部程序的方法 qprocess
- 在QT程序中使用其它图形库
- 使用QT调用外部程序-小心linux中的命令陷阱