QString::indexOf 的一个坑

QString::indexOf  主要作用是从一个字符串中查找另外一个字符或者字符串,如果找不到则返回-1,找到则返回位置。


然而此函数有一个小坑需要注意:

QString strTemp="test 1111 33333"
int n=strTemp.indexOf("Test",Qt::CaseInsensitive);

例如上边的代码,希望从strTemp中忽略大小写查找“test”,然而返回值一直是-1;

why???

如果使用contains函数就会返回true:

strTemp.contains("Test",Qt::CaseInsensitive)
为什么会造成以上结果呢?

仔细看了QT 的帮助文档,终于找到答案:

我们上边的示例匹配的应该是下边这个函数

int QString::indexOf(const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

此函数有两个默认参数,第二个参数(默认参数1)是匹配的起始位置,默认是0,第三个参数忽略大小写的设置。

我们的例子中虽然设置的是忽略大小的宏,但放置在默认参1的位置。

Qt::CaseInsensitive    0

也就相当于使用了函数:

from=0 

cs还是默认参区分大小写。

所以才会与想像结果不一致。

而这个错误在编译时候是不会有提示的。

你可能感兴趣的:(QT,例子)