问题描述
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);