我希望读取一些字符或字符串,并通过Qt 4.8.6从串口显示QTextBrowse并调用以下函数(textBrowser是QTextBrowser的对象):
connect(com, SIGNAL(readyRead()), this, SLOT(readSerialPort()));
connect(textBrowser, SIGNAL(textChanged()), SimApplianceQtClass, SLOT(on_textBrowser_textChanged()));
void SimApplianceQt::on_textBrower_textChanged()
{
ui.textBrowser->moveCursor(QTextCursor::End);
}
void SimApplianceQt::readSerialPort()
{
QByteArray temp = com->readAll();
ui.textBrowser->insertPlainText(temp);
}
但是,每次我都无法正确显示textBrowser中的字符或字符串。这些输入字符串总是被切割成较小的字符串,以便在textBrowser中以多行显示。例如,一个字符串" 0123456789"可以显示为(多行):
01
2345
6789
如何处理这个问题?非常感谢。
答案 0 :(得分:0)
发生的readyRead
信号是触发,而不是在收到所有之后,但是接收并准备好阅读之后。
当您收到第一个readyRead
时,无法保证所有内容都已到达或可读
对于几乎任何类型的IO来说,这是一个常见的“问题”,特别是如果数据大于非常少的字节。通常没有自动方式知道何时收到所有数据。
有一些可能的解决方案:
所有这些都需要您将数据放在readSerialPort()中的缓冲区中,而不是直接将其添加到文本浏览器中。也许SimApplianceQt中的一个简单的QByteArray成员变量已经可以解决你的问题。
其余的取决于确切的解决方案。