解决QProcess对象调用execute执行cmd命令不支持中文和空格的问题(转)

在QT编程中,使用QProcess对象执行包含中文和空格的cmd命令时会遇到问题。通常使用system()函数不方便,而QProcess的execute()函数单参数版本也不能处理这种情况。通过使用QProcess的重载函数execute(const QString&, const QStringList&),将命令拆分为单独的参数,可以成功执行。例如,将长命令拆分成程序名和参数列表,然后调用两个参数的execute(),可以解决这个问题。这种方法适用于Windows平台,但在Linux下可能无效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2014-08-05 06:37 ⁄ 工业·编程 ⁄ 共 804字 ⁄ 字号 小 中 大 ⁄ 评论 1 条

在QT中要想执行调用cmd命令:

    一种方式是使用system()函数,但是此函数没有返回值,有时不太方便,

    另一种方法就是生成QProcess对象,调用其execute函数,有时当你用这个方法时,当cmd命令含有中文和空格时就不执行。下面来说说这个情况。

仔细看QProcess的API,发现有重载的两个execute函数:

execute ( const QString &, const QStringList & ) : int

execute ( const QString & ) : int

大多数情况下我们用的是第二个:例如我要调用一个叫regasm2.0.exe的程序,执行一句

C:/Documents and Settings/Administrator/桌面/新建文件夹/regasm2.0.exe /s  /nologo /codebase C:/aa.dll

(不用管这个干什么用的)可以看到cmd命令中有空格和中文,所以当我们执行

QProcess pro(0); 

cmd = "C:/Documents and Settings/Administrator/桌面/新建文件夹/regasm2.0.exe /s /nologo /codebase C:/aa.dll"; 

int bret = pro.execute(cmd); 

你会发现这样是执行不通过的,但是使用两个参数的execute函数就可以完成,具体如下:

QProcess pro(0); 

 

QString t1 ="C:/Documents and Settings/Administrator/桌面/新建文件夹/regasm2.0.exe"; 

QStringList t2; 

t2.append("/s"); 

t2.append("/nologo"); 

t2.append("/codebase"); 

t2.append("C:/aa.dll"); 

int bret = pro.execute(t1,t2); 

注:此方法可以用于windows平台,linux平台没有乱码问题,而且使用两个参数的函数,居然没有效果

转自:解决QProcess对象调用execute执行cmd命令不支持中文和空格的问题 | 求索阁 (qiusuoge.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值