Qt調用外部程序QProcess通信


mainwindow.cpp文件:

--------------------------------

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextCodec>
#include <QCloseEvent>
 
        
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
        
    //Qt對中文支持
    QTextCodec *codec = QTextCodec::codecForName("GB2312");
    QTextCodec::setCodecForLocale(codec);
 
        
    process = new QProcess(this);
 
        
    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)));
}
 
        
MainWindow::~MainWindow()
{
    delete ui;
}
 
        
void MainWindow::on_pushButton_clicked(){
    QString exe;
    //exe = "test.bat";//要啟動的程序
    exe = "test.bat";
 
        
    QStringList args;
    //args<<"ping"<<"www.baidu.com";//要傳遞的參數
    args<<"";
 
        
    process->start(exe,args);
 
         
         
        
    if (false == process->waitForStarted()){
        ui->textBrowser->append("Process call failed!");
    }else{
        ui->textBrowser->append("Process call successed!");
    }
}
 
        
 
        
void MainWindow::finish_process(int exitCode, QProcess::ExitStatus exitStatus){
    if (exitStatus == QProcess::NormalExit){
        ui->textBrowser->append("process exit normal");
    }
    else{
        ui->textBrowser->append("process exit crash");
    }
 
        
    ui->textBrowser->append("process finised");
}
 
        
void MainWindow::start_read_output(){
    QByteArray ba = process->readAllStandardOutput();
    ui->textBrowser->append(QString::fromLocal8Bit(ba));
}
 
        
void MainWindow::start_read_err_output(){
    QByteArray ba = process->readAllStandardError();
    ui->textBrowser->append(QString::fromLocal8Bit(ba));
}
 
        
void MainWindow::closeEvent(QCloseEvent *event){
    process->kill();
    if(!process->waitForFinished(100))
        return;
    event->accept();
}

-----------------------------------------------------------------------------------------------------------------------------------------------
mainwindow.h文件:
-----------------------------
#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_read_output();
    void start_read_err_output();
    void finish_process(int exitCode, QProcess::ExitStatus exitStatus);
 
        
private:
    Ui::MainWindow *ui;
};
 
        
#endif // MAINWINDOW_H

---------------------------------------------------------------------------------------------------------------------------------------------------
測試方法:
在Qt的Ui中放置一個textBrowse和pushButton,並且在程序目錄中創建一個test.bat文件,文件內容為:ping www.baidu.com

輸出結果:

 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM