QT启动 一个进程-一个exe文件方法

本文介绍如何使用Qt的QProcess类启动外部程序并与其进行通信。通过具体代码示例展示了启动notepad.exe和cmd.exe的过程,并解释了QProcess的状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QT启动 一个进程-一个exe文件方法。

启动notepad.exe或cmd.exe

  • Qt 的 QProcess 类用来启动一个外部程序并与其进行通信。
  • 使用 start() 函数运行一个进程,之后 QProcess 进入 Starting 状态;
  • 当程序已经运行后,QProcess 就会进入 Running 状态并发送 started() 信号;
  • 当进程退出后,QProcess 重新回到 NoRunning 状态并发射 finished() 信号。
  • 新建Qt Widget应用,拖入Push Button.
  • 如下是头文件与cpp文件
  • #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QProcess>
    
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private slots:
        void on_pushButton_clicked();
        void showResult();
        void showState(QProcess::ProcessState);
        void showError();
        void showFinished(int,QProcess::ExitStatus);
    
    
    private:
        Ui::MainWindow *ui;
        QProcess my_Process;
    };
    #endif // MAINWINDOW_H
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QDebug>
    #include <QTextCodec>
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect(&my_Process,&QProcess::readyRead,this,&MainWindow::showResult);
        connect(&my_Process,&QProcess::stateChanged,this,&MainWindow::showState);
        connect(&my_Process,&QProcess::errorOccurred,this,&MainWindow::showError);
        connect(&my_Process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(showFinished(int,QProcess::ExitStatus)));
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    
    void MainWindow::on_pushButton_clicked()
    {
       // my_Process.start("notepad.exe");
        QString program ="cmd.exe";
        QStringList arguments;
        arguments<<"/c dir&pause"; // /c指定命令dir在cmd中执行
        my_Process.start(program,arguments);
    }
    void MainWindow::showState(QProcess::ProcessState state)
    {
        qDebug()<<"showState: ";
        if(state == QProcess::NotRunning)
        {
            qDebug()<<"没有程序运行";
        }
        else if(state==QProcess::Starting)
        {
            qDebug()<<"开始中";
        }
        else
        {
            qDebug()<<"运行中。。。";
        }
    }
    void MainWindow::showResult()
    {
        QTextCodec *codec=QTextCodec::codecForLocale();
        qDebug()<<"显示结果:"<<endl<<codec->toUnicode(my_Process.readAll());
    }
    void MainWindow::showError()
    {
        qDebug()<<"显示错误信息:"<<endl<<my_Process.errorString();
    }
    void MainWindow::showFinished(int exitCode,QProcess::ExitStatus exit_stattus)
    {
        qDebug()<<"显示完成:"<<endl<<"退出代码:"<<exitCode<<",退出状态:"<<exit_stattus;
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txwtech笛克电科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值