Bootstrap

QT利用QProcess实现cmd命令调用的注意事项


前言

本文搜集了在利用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++中需要想在字符串中适应”“需要用”\"代替

;