QProcess::setArguments 双引号中含空格导致报错

问题描述

setArguments(input) input是"C:\***dll.c" /command "Edit.GoTo 212"启动程序参数无效

原因

使用QProcess::setArguments时会在输入外再加上双引号

例如
"C:\Intel***dll.c" /command "Edit.GoTo 212"会变成
""C:\Intel***dll.c"" "/command" ""Edit.GoTo 212""

""路径""没有空格可以识别,""参数""有空格造成影响不能识别

解决思路

将双引号中的空格替换为一个不常见的字符,然乎空格分隔,再将不常见的字符替换为空格

QProcess *launchEditor = new QProcess(this);
launchEditor->setProgram(m_editorDialog->getEditorPath());

// 使用正则表达式替换双引号中的空格为感叹号,并去除双引号
QRegularExpression re("\"([^\"]*)\"");
QString replaced_args = args;
QRegularExpressionMatchIterator i = re.globalMatch(args);
while (i.hasNext())
{
  QRegularExpressionMatch match = i.next();
  QString part = match.captured(1);													// 获取双引号中的内容
  QString replacedPart = part.replace(" ", "!");										// 将空格替换为感叹号
  replaced_args.replace(match.capturedStart(), match.capturedLength(), replacedPart); // 替换原始字符串中的内容
}

QStringList list_arg = replaced_args.split(" ");
for (QString &part : list_arg)
{
  part.replace("!", " "); // 将感叹号替换为空格
}

launchEditor->setArguments(list_arg);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值