小编Ole*_*nko的帖子

解决QT的QString arg()模糊性问题

QString::arg()当字符串包含位置标记之后的数字时,会出现问题.从QString::arg()功能描述中不清楚在这种替换的情况下会发生什么:

QString("String for replacement %1234").arg("blah");
Run Code Online (Sandbox Code Playgroud)

这会导致"String for replacement blah234""String for replacement blah34"

我查看了QT的源代码来回答这个问题.看起来寻找位置标记的算法似乎是"贪婪的",并且在上面的例子中它将采用两个数字.

以下是QString::arg()(QT 4.8.4)中使用的QT函数的来源:

static ArgEscapeData findArgEscapes(const QString &s)
{
const QChar *uc_begin = s.unicode();
const QChar *uc_end = uc_begin + s.length();

ArgEscapeData d;

d.min_escape = INT_MAX;
d.occurrences = 0;
d.escape_len = 0;
d.locale_occurrences = 0;

const QChar *c = uc_begin;
while (c != uc_end) {
    while (c != uc_end && c->unicode() != '%')
        ++c;

    if (c == uc_end)
        break; …
Run Code Online (Sandbox Code Playgroud)

qstring qt ambiguity

12
推荐指数
1
解决办法
2406
查看次数

标签 统计

ambiguity ×1

qstring ×1

qt ×1