前言
本文搜集了在利用QT中的QProcess类进行cmd程序调用时本人遇到的问题,在此总结下为广大开发者提供参考
一、发送cmd的命令
QStringList arguments;
QString temp;
arguments <<"/c" <<"adb root"; //将命令写入列表中(命令前面加/c的作用是执行命令完成后关闭命令窗口)
process->start("cmd",arguments); //这里是process的start重载,意思为加载cmd窗口,并将命令写入
arguments.clear(); //命令写入完成后清除列表
process->waitForStarted(); //等待进程开始
process->waitForFinished(); //等待进程结束
process为自己定义的QProcess类,在发送命令时,实测提前将命令装入QStringList中,可以防止很多报错(主要是空格),并且每次发送完成后,都要进行等待,等待次命令进程结束
二、接收cmd命令的返回结果
在我们自己打开windows命令窗口时,输入cmd命令,窗口会返回所有结果,无论是错误还是其他结果,但是在使用QProcess类获取cmd结果时,窗口返回的结果是分开的,分为错误结果与输出结果,如果命令输入错误,那么只有错误结果通道会返回信息,而输出结果获取的则为空消息
获取正常输出结果:
QString temp;
temp = QString::fromLocal8Bit(process->readAllStandardOutput());
获取错误输出结果:
QString temp;
temp = QString::fromLocal8Bit(process->readAllStandardError());
三、注意事项
1、带有路径的命令
如果想在使用此"adb push C:\Users\Administrator\Desktop\app-release.apk /system/app/“命令,直接这样写是识别不出来的,在C++中需要想在字符串中适应”“需要用”\"代替