路径中的 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);
或者使用 start
的 QStringList()
重载自动转义。
您可以将参数作为 QStringList 传递给 QProcess,这不会考虑空格。
这是一个小片段,可以用您最喜欢的文件管理器进行测试。
static QString arg="/home/user/.wine/drive_c/Program Files/";
static QProcess p;
p.start("/usr/bin/dolphin", QStringList(arg));
我发现很少 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);
或者使用 start
的 QStringList()
重载自动转义。
您可以将参数作为 QStringList 传递给 QProcess,这不会考虑空格。
这是一个小片段,可以用您最喜欢的文件管理器进行测试。
static QString arg="/home/user/.wine/drive_c/Program Files/";
static QProcess p;
p.start("/usr/bin/dolphin", QStringList(arg));