【问题标题】:How do you delete a sub-string in a string(qstring) in Qt如何在 Qt 中删除字符串(qstring)中的子字符串
【发布时间】:2020-01-22 07:20:03
【问题描述】:

Qt中是否有类似于Delphi中的delete()和copy()的函数。

我正在从通过 USB 连接到我的计算机的设备读取数据并将其存储为 QString。读取的每一行都不相同(或被缩短,即使在使用 readyRead 时也是如此)。我创建了一个缓冲区刺来添加这些“半刺”(例如,string =“This”而不是“This is a string#”),现在我想将字符串复制到“#”,然后删除字符串因此,如果添加了新的“半刺”,我可以对它们做同样的事情。下面的代码是我试过的

void MainWindow::readSerial()
{
    QByteArray serialData = port->readAll();
    serialBuffer += serialData;

    QByteArray serialString = serialBuffer.

    qDebug() << serialString;
    ui -> textEdit ->append(serialString);

    //serialBuffer.replace(serialString,"");
}

以上代码只返回一个空字符串。

【问题讨论】:

  • QString::operator+= 函数具有 an overloadQByteArray。不需要toStdStringfromStdString
  • 谢谢。我更改了它并且它可以工作,但我仍然需要一种方法来复制字符串的某个部分,然后删除该部分
  • 我建议您尽可能长时间地将数据保留为 QByteArray。只有在需要 QString 时才转换为 QString。此外,始终对任何外部数据(例如来自文件或网络)使用显式编码,而不是相信默认值始终正确。
  • 特别是如果数据是 Utf8,单个 unicode 字符可能会在读取之间拆分,因此在这种情况下,您必须将读取缓冲区保存为字节,并且仅在您解码为 QString 时有整行(或以其他方式知道您不会拆分 utf8 字符)。
  • 哪些方法可用于读取以下字符串中'$'和"\r\n"之间的值:"$GNRMC,161500.00,A,2503.00987,S,02824.47892,E, 0.230,,210919,,,A*7D\r\n$GNRMC," end 然后删除读取的部分,新字符串为:"$GNRMC,"

标签: c++ qt qstring


【解决方案1】:
void MainWindow::readSerial()
{
    QByteArray serialData = port->readAll();
    serialBuffer += serialData;

    QString serialString = serialBuffer.mid(serialBuffer.indexOf("$"),serialBuffer.indexOf("\r\n"));

    qDebug()<< "index of \r\n" << serialBuffer.indexOf("\r\n");
    qDebug() << "SerialString" <<serialString;
    ui -> textEdit ->append(serialString);
    qDebug() << "SerialBuffer: " << serialBuffer;

    serialBuffer.replace(serialString + "\r\n","");

}

上面的代码有效。谢谢大家。

问候

【讨论】:

  • 即使回答您自己的问题,也请尝试write a good answer。这将有助于其他与您有相同或相似问题的人了解有关您所做工作的更多详细信息。
猜你喜欢
  • 2015-10-04
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 2019-09-08
  • 1970-01-01
相关资源
最近更新 更多