【问题标题】:QByteArray indexOf deprecated?QByteArray indexOf 已弃用?
【发布时间】:2021-04-18 15:06:18
【问题描述】:

我使用的是 Qt 5.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 ) {

使用QByteArray::indexOf() 的行有文字:

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

我不明白这一点,因为建议的函数都不像 QByteArrray::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

【问题讨论】:

    标签: c++ qt qbytearray


    【解决方案1】:

    仅不推荐使用 QByteArray::indexOf(const QString& str, int from)。其他重载仍然可用。

    您要做的是使用QString::toUtf8()QString::toLatin1()QString::toLocal8Bit() 检索代表QStringQByteArray,然后可以将其传递给QByteArray::indexOf() 的非弃用重载.

    原因很可能是接受QStringQByteArray::indexOf() 重载不知道如何从编码的角度解释字符串。因此,您必须明确地进行“转换”。我没有对此进行调查,所以可能还有其他原因导致该功能被弃用。

    查看有问题的已弃用函数的documentation,我们了解到它在内部使用了QString::toUtf8(),因此您可以像这样调整您的代码以获得相同的行为:

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

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 2014-02-12
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多