c++ - 为什么在使用 QString::right 的字符串开头省略了逗号?

标签 c++ windows qt qt5

接听QString replace characters outside of quotes我偶然发现了一种奇怪的行为。

执行这段代码:

foreach (const QString &key, json.keys()) {
    const QJsonValue &value(json.value(key));

    qDebug() << key << value.toString().right(key.length());
}

使用这个 jsonA:

QJsonObject json {
    {"thing1", "thing1value1"},
    {"thing2", "thing2value2"},
    {"thing3", "thing3value3"}
};

和这个 jsonB(注意 thing2 之后的逗号):

QJsonObject json {
    {"thing1", "thing1value1"},
    {"thing2", "thing2,value2"},
    {"thing3", "thing3value3"}
};

在这两种情况下都会产生:

"thing1" "value1"
"thing2" "value2"
"thing3" "value3"

不应该是:

"thing1" "value1"
"thing2" ",value2"
"thing3" "value3"

在第二种情况下,B?

最佳答案

QString::right功能

Returns a substring that contains the n rightmost characters of the string.

[特别强调我的]

因为 key 字符串的长度是6,那么最右边的6个字符将被返回,给你"value2"没有逗号。

如果你想得到没有前导键的字符串,你可以使用 mid相反:

value.toString().mid(key.length())

对于您的用例,我宁愿建议 midRef ,因为实际上不需要创建子字符串的拷贝

关于c++ - 为什么在使用 QString::right 的字符串开头省略了逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52402665/

相关文章:

qt - 当我将窗口移动到具有不同 DPI 的屏幕时,为什么我的 QML 项目没有被缩放?

c++ - Qt utf-16 输出在 Windows cmd 和 powershell 中显示问号——在 C++ 中具有最小可重现示例

qt - 我可以在 Qt 中制作 Material 抽屉导航和 FAB 吗?

c++ - 指向 cv 和/或 ref 限定成员函数的指针的 Typedef

c++ - 我怎么可能更快地搜索排序的二叉树?

windows - 如何使用批处理文件获得文件的独占锁?

c++ - 解除分配不会释放 Windows/C++ 应用程序中的内存

windows - SendMessage(HWND_BROADCAST, ....) 挂起

c++ - RInside 找不到已编译 R 的系统 Renviron

c++ - C/C++ 套接字 : IPv6 TCP connection fails if I do anything before it