【发布时间】: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 overload 和QByteArray。不需要toStdString和fromStdString。 -
谢谢。我更改了它并且它可以工作,但我仍然需要一种方法来复制字符串的某个部分,然后删除该部分
-
我建议您尽可能长时间地将数据保留为 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,"