提问者:小点点

QByteArray indexOf已弃用?


我使用的是QT5.15.2,我有以下代码:

    QByteArray arybytData = mpsckIncoming->readAll();
    bool blnHTTP = false;
    
    if ( arybytData.startsWith("GET / HTTP/") == true ) {
    //HTTP Request, probably from browser, jump to end of header
        const QString cstrHeaderTerminator("\r\n\r\n");
        int intHdrEnd;
        
        if ( (intHdrEnd = arybytData.indexOf(cstrHeaderTerminator)) == -1 ) {

使用indexOf的行包含以下文本:

'indexOf' is deprecated: Use QString's toUtf8(), toLatin1() or toLocal8Bit()

我不明白这一点,因为建议的函数都不像indexof函数。

我是不是该不理它?

我正在使用:

Qt Creator 4.14.0
Based on Qt 5.15.2 (Clang 11.0 (Apple), 64 bit)
Built on Dec 17 2020 07:57:30
From revision 909f74dc56

共1个答案

匿名用户

仅不推荐使用。其他重载仍然可用。

您要做的是使用来检索表示,然后将其传递给的非弃用重载。

其原因很可能是接受重载不知道如何从编码的角度解释字符串。因此,您必须显式地进行“转换”。我没有研究这个问题,所以可能还有其他原因导致这个函数不受欢迎。

查看所讨论的不推荐使用的函数的文档,我们了解到它在内部使用了,因此您可以像这样调整代码以获得相同的行为:

if ( (intHdrEnd = arybytData.indexOf(cstrHeaderTerminator.toUtf8())) == -1 ) {