一、项目介绍
利用QProcess类实现启动进程的功能进阶(以dos命令dir为例)。
二、项目基本配置
新建一个Qt案例,项目名称为“ProcessTest”,基类选择“QWidget”,点击选中创建UI界面复选框,完成项目创建。
三、UI界面设计
UI界面布局如下:
界面中只创建了1个控件,其名称和类型如下:
序号 | 名称 | 类型 | 属性 |
---|---|---|---|
① | pbn_process | QPushButton | text:启动一个进程 |
四、主程序实现
4.1 widget.h头文件
头文件中需要声明5个私有槽函数和1个私有对象:
private:
QProcess myProcess;
private slots:
void on_pbn_process_clicked();
void showResult();
void showState(QProcess::ProcessState);
void showError();
void showFinished(int,QProcess::ExitStatus);
4.2 widget.cpp源文件
在构造函数中添加信号和槽的关联:
//连接相关信号和槽函数
connect(&myProcess,&QProcess::readyRead,this,&Widget::showResult);
connect(&myProcess,&QProcess::stateChanged,this,&Widget::showState);
connect(&myProcess,&QProcess::errorOccurred,this,&Widget::showError);
connect(&myProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(showFinished(int,QProcess::ExitStatus)));
定义按钮点击槽函数,启动cmd命令行并实现相关命令:
//点击按钮启动相关进程
void Widget::on_pbn_process_clicked()
{
QString program="cmd.exe";
QStringList arguments;
arguments << "/c dir&pause";//指定dir在cmd命令行中运行,指定运行完命令后暂停(dir显示指定路径上所有文件或目录的信息)
myProcess.start(program,arguments);//指定程序名称和命令行参数
}
定义四个槽函数:
//显示进程读取结果
void Widget::showResult()
{
QTextCodec *codec=QTextCodec::codecForLocale();//返回指向最适合此语言环境的编解码器的指针
qDebug().noquote()<<"showResult:"<<codec->toUnicode(myProcess.readAll());//读取进程运行结果
}
//显示进程状态
void Widget::showState(QProcess::ProcessState state)
{
qDebug()<<"showState:";
if(state==QProcess::NotRunning){
qDebug()<<"Not Running";
}else if(state==QProcess::Starting){
qDebug()<<"Starting";
}else{
qDebug()<<"Running";
}
}
//如果发生错误,则显示相关错误信息
void Widget::showError()
{
qDebug()<<"showError:"<<myProcess.errorString();
}
//显示结束代码和结束状态
void Widget::showFinished(int exitCode,QProcess::ExitStatus exitStatus)
{
qDebug()<<"showFinished:"<<exitCode<<exitStatus;
}
五、效果演示
完整效果如下:
而我们利用cmd打开命令行输出相关dir指令时显示如下:
二者运行效果是相同的。
如果没有看懂的话,完整代码可以参考:
https://download.csdn.net/download/didi_ya/82734863
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~