【问题标题】:MAC - QString replace spaces with backslash spacesMAC - QString 用反斜杠空格替换空格
【发布时间】:2017-04-15 21:46:49
【问题描述】:

首先,我见过this answer

我目前在 Mac 上使用 Qt 5.8,并尝试了以下代码:

QString test("/Users/test/Documents/ASCII Tables.pdf");
qDebug() << test.replace(" ", "\\ ");

预期结果应该是这样的:

"/Users/test/Documents/ASCII\ Tables.pdf"

我得到的是添加了两个黑斜线:

"/Users/test/Documents/ASCII\\ Tables.pdf"

有人有建议吗?


更新:(关于@docsteer 的回答)我打算将QString test 用作QProcess:start() 的一部分,例如:

QProcess process;
process.start("ls " + test);
process.waitForFinished(-1);
qDebug() << process.readAllStandardOutput();
qDebug() << process.readAllStandardError();

结果并不像预期的那样,因为两个反斜杠都插入了命令:

""
"ls: /Users/test/Documents/ASCII\\: No such file or directory\nls: Tables.pdf: No such file or directory\n"

【问题讨论】:

    标签: macos qt replace qstring


    【解决方案1】:

    你看到的不是字符串的实际内容。 QDebug 在打印字符时对其进行转义:

    http://doc.qt.io/qt-5/qdebug.html#operator-lt-lt-16

    通常,QDebug 打印引号内的字符串并转换 将不可打印的字符转换为其 Unicode 值 (\u1234)。

    要打印不可打印的字符而不进行转换,请启用 noquote() 功能。

    如果您将代码更改为

    qDebug().noquote() << test.replace(" ", "\\ ");
    

    你会看到你所期望的——字符串的原始内容

    【讨论】:

    • 嗨,感谢您的通知,但我更新了问题,也许还有其他建议? ^_^
    • 好的,这是对原始问题的扩展。我没有方便的 Mac 来尝试这个,但我怀疑您需要使用带参数的 QProcess 而不是将其全部放入命令中。试试看:QProcess process;QStringList arguments;arguments &lt;&lt; test;process.setProgram("ls");process.setArguments(arguments);
    • 哦,是的,当使用programarguments 调用process 时,我们不需要将空格转换为反斜杠空格...非常感谢
    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2023-03-24
    • 2016-12-18
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多