添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

//注意, mProcess为共享指针 ,要特别注意, 信号和槽的连接要使用原始指针 (也就是mProcess.get()函数)

std::shared_ptr<QProcess> mProcess;    
mProcess = std::make_shared<QProcess>();
mProcess->setProgram(cmd);
mProcess->setArguments(splitProcessCommand(arguments));
mProcess->setProcessChannelMode(QProcess::MergedChannels);   //设置读取标准输出模式 
mProcess->setProcessEnvironment(env);                        //设置环境变量
mProcess->setWorkingDirectory(workingDir);                   //这种工作目录
ok = connect(mProcess.get(), &QProcess::readyReadStandardError,[this](){ 
        this->log(QString::fromLocal8Bit( mProcess->readAllStandardError()));
ok = connect(mProcess.get(), &QProcess::readyReadStandardOutput,[this](){
        //这样就实现把结果exe的信息给显示在控制台了
        this->log(QString::fromLocal8Bit( mProcess->readAllStandardOutput()));    
mProcess->start();
mProcess->waitForStarted(5000);
//这里可以给它传入一些数据
mProcess->write(readFileToByteArray(mInputFile));
mProcess->closeWriteChannel();
//如果啥时候想终止这个进程,还可以用下面的代码
mProcess->closeReadChannel(QProcess::StandardOutput);
mProcess->closeReadChannel(QProcess::StandardError);
mProcess->closeWriteChannel();
mProcess->terminate();
mProcess->kill();
//这里面就能获得启动的exe的标准输出信息了
void DebugTarget::log(const QString &msg)
    emit debugTargetOutput(msg);

特别注意:

如果需要修改process的控制台窗口是否显示,则用下面的函数

mProcess->setCreateProcessArgumentsModifier([this](QProcess::CreateProcessArguments * args)
        //下面这两行让后台exe弹出一个窗口         
        args->flags |=  CREATE_NEW_CONSOLE;            
        args->flags &= ~CREATE_NO_WINDOW;

切记:在这个函数里,下面这一行,千万不要用,否则qprocess关闭了标准输出,我们就获取不到输出了(我踩了这个巨坑,一天才找出来)
               args->startupInfo -> dwFlags &= ~STARTF_USESTDHANDLES;

当然,如果不通过信号与槽函数机制,自己主动去读取mProcee的标准输出也可以的,那就用

mProcee->readAll()

mProcee->write()

/下面这两行让后台exe弹出一个窗口。如果需要修改process的控制台窗口是否显示,则用下面的函数。在这个函数里,下面这一行,千万不要用,否则qprocess。,我们就获取不到输出了(我。 QProcess类用于启动外部程序并与它们通信。 QProcess允许将进程视为I/O设备。可以像使用qtcsocket访问网络连接一样对进程进行写入和读取。然后可以通过调用write()写入进程的标准输入,并通过调用read()、readLine()和getChar()读取标准输出。因为QProcess继承了QIODevice,所以它还可以用作QXmlReader的输入源,或者用于生成要使用QNetworkAccessManager上载的数据。 当进程退出时,QProces 在QT程序中我们经常需要与其他的程序间进行交互,而与终端进行交互就是一个例子。在不需要获取返回信息的情况下我们可以直接使用"system()"函数执行,但是当需要获取执行的结果或者需要实时地将结果输出到窗口上时,就比较难办了,需要涉及进程管道等等。而QT提供的QProcess类则大大简化了这一过程。 QProcessQT提供的与外部程序进行交互的一个类,主要使用到以下的函数: sta... 本例介绍如何使用QProcess启动进程并实时获取启动进程的标准输出后显示。 本例在QT的MainWindow 启动后会每个1秒在控制台打印ping的log,如下图所示 #include "mainwindow.h" #include <QApplication> #include <QProcess> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc
QStringList arguments; arguments << "/c" << "netstat -tno|findStr ***.***.***.***(ip地址)"; QProcess process(this); process.start("cmd.exe", arguments); process.waitForStart...
一、函数接口 QProcess类提供了三个函数 1、QProcess::execute() 以堵塞方式的执行shell命令,当命令执行完成后,调用进程才会继续执行。命令输出的任何数据都将转发给调用进程输出(因此无法捕获)。 2、QProcess::start() 以异步方式的执行shell命
Qt5是一款功能强大的C++开发框架,在其中包含了QProcess类,该类可以实现进程的创建和进行管道通信。管道通信是一种进程间的数据传输方式,可以在不同进程间传递数据,实现进程间的通信。 在Qt5中使用QProcess类进行管道通信的方法如下: 1. 创建进程:使用QProcess类的start()函数创建进程,并将进程的输出流和输入流连接起来。 2. 读取和写入数据:使用QProcess类的write()函数向进程中写入数据,使用QProcess类的read()函数从进程中读取数据。 3. 处理数据:使用程序对数据进行处理,并将处理结果输出输出流中。 4. 关闭进程:使用QProcess类的close()函数关闭进程,结束管道通信。 使用Qt5的QProcess类进行管道通信可以同时执行多个进程,并且可以实现跨平台,支持Windows、Linux等操作系统。同时QProcess类还提供了许多其他的功能,比如可以获取进程的运行状态,可以获取进程错误信息等。因此,在Qt5框架的开发过程中,使用QProcess类进行管道通信可以大大提高开发效率,减少开发难度。
Mr-Apple: 栈空间是一种自动分配和释放内存的数据结构,由编译器自动管理,用于存储函数调用时的局部变量、函数参数等。栈空间的内存分配和释放速度非常快,但是栈空间的大小通常比较有限。 堆空间是一种动态分配和释放内存的数据结构,由程序员手动管理。堆空间的内存分配和释放速度较慢,但是堆空间的大小可以根据程序的需要进行动态调整。堆 latex排版原理 常用算法排版伪代码模块 添加注释以及注意事项 qq_43133348: 关键字后也可以使用\hfill,效果是一样的,用空格符(~)在\tcp内容的末尾将不同批注补充到同样长度即可