zoukankan      html  css  js  c++  java
  • 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

    输出结果:

    
    
    
    
  • 相关阅读:
    AVL自平衡二叉树
    笔试+面试信息整理----面向笔试学习、面向面经编程
    传入值参数&传入引用参数的区别
    NLPIR智能挖掘实现行业大数据应用价值
    NLPIR大数据挖掘融合库、智、理三大先进理论技术
    NLPIR智能语义挖掘文本大数据深层意义
    NLPIR智能语义技术从采集到分析一步到位
    灵玖软件:NLPIR智能挖掘对文本数据精细化分析
    九眼合同智能审核系统运用NLPIR大数据技术进行核查
    NLPIR九眼智能审核平台助合同文本深度核查
  • 原文地址:https://www.cnblogs.com/windfall/p/5327172.html
Copyright © 2011-2022 走看看