Qt5在路径中逃脱空间

时间:2015-01-06 19:15:12

标签: c++ qt escaping qt5 space

我发现很少answers但他们不能在我的Qt5.3.1版本上工作。

我有一个QProcess我需要以文件路径作为参数运行:

  

/home/user/.wine/drive_c/users/user/Local Settings / LocalLow / A B   C /测试/ TEST1

当我尝试通过此QProcess对象运行程序时,它失败了,因为它没有转义空格。然后我尝试使用QDir::toNativeSeparators修复它,但它不起作用:

QDir::toNativeSeparators("/home/user/.wine/drive_c/users/user/Local Settings/LocalLow/A B C/test/test1")

返回与我作为参数传递的完全相同的字符串。

这就是我开始这个过程的方式:

QProcess process;
QStringList arguments;
arguments.append(binaryDir);
process.setArguments(arguments);
process.setProgram("wine");
process.start();

P.S。我无法手动修复它,因为路径从外面传到某处。

2 个答案:

答案 0 :(得分:1)

您可以将参数作为QStringList传递给QProcess,这不会考虑空格。

这是一个用您喜欢的文件管理器进行测试的小片段。

static QString arg="/home/user/.wine/drive_c/Program Files/";
static QProcess p;
p.start("/usr/bin/dolphin", QStringList(arg));

答案 1 :(得分:0)

有两种可能的方法。您可以使用转义引号(在引号之间插入字符串):

QStringList arguments;
QString str="\"/home/user/.wine/drive_c/users/user/Local Settings/LocalLow/A B C/test/test1\"";
arguments.append(str);

或者使用QStringList()的{​​{1}}重载自动转义。