路径中的 Qt5 转义空间

Qt5 escape spaces in path

我发现很少 answers 但它们不适用于我的 Qt5.3.1 版本。

我有一个 QProcess,我需要使用文件路径作为参数来运行它:

/home/user/.wine/drive_c/users/user/Local Settings/LocalLow/A B C/test/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。我无法手动修复它,因为路径来自外部。

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

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

或者使用 startQStringList() 重载自动转义。

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

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

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