有时候不同的功能做成了几个不同exe,这个时候需要在一个进程中启动另一个exe,这个时候就需要用到QProgress
异步启动
cpp
//参数1:程序全路径
//参数2:启动参数
//参数3:打开方式。使用默认的就行
void QProcess::start(const QString &program, const QStringList &arguments = {}, QIODeviceBase::OpenMode mode = ReadWrite)
同步启动
cpp
//静态方法
//参数1:程序的全路径
//参数2:启动参数
//返回值:返回-1表示无法启动,返回-2表示程序崩溃
[static] int QProcess::execute(const QString &program, const QStringList &arguments = {})
举例:
启动记事本
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QPushButton>
#include<QProcess>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr): QWidget(parent)
{
resize(500,400);
QPushButton* btn_open_notepad=new QPushButton("打开记事本",this);
btn_open_notepad->setGeometry(10,10,100,50);
connect(btn_open_notepad,&QPushButton::clicked,this,[=](){
//传入路径(环境变量可以找到)或绝对路径,直接调用QProcess的start方法,异步
myprocess.start("notepad.exe");
//或者execute方法,同步
//QProcess::execute("notepad.exe");
});
QPushButton* btn_open_cmd=new QPushButton("打开cmd",this);
btn_open_cmd->setGeometry(10,btn_open_notepad->geometry().bottom()+10,100,50);
connect(btn_open_cmd,&QPushButton::clicked,this,[=](){
myprocess.start("C:/windows/system32/cmd.exe",{"/c dir&pause"});//还可以在启动的时候传递参数给被启动的进程
//可以获取到这个进程的输出,每当有输出时,QProcess会发出readyRead的信号
});
connect(&myprocess,&QProcess::readyRead,this,[=](){
qDebug()<<QString(myprocess.readAll());
});
}
~Widget()=default;
private:
QProcess myprocess;
};
#endif // WIDGET_H