QByteArray的外部与内部声明

时间:2015-10-28 09:21:30

标签: c++ qt serial-port

我目前遇到QSerialPort的一些问题:当我在一个看起来像

的例子中使用该函数时
QKeyEvent *e;
emit getData(e->text().toLocal8Bit());
connect(console, SIGNAL(getData(QByteArray)), this, SLOT(writeData(QByteArray)));
void MainWindow::writeData(const QByteArray &data)
{
    qDebug() << "Data is to write: " << data;
    serial->write(data);
}

然后接收设备可以处理数据。但是当我将函数writeData()更改为

void MainWindow::writeData(const QByteArray &data)
{
    QString a = "Q";
    QByteArray b = a.toLocal8Bit();
    serial->write(b);
}

接收设备无法使用接收的数据。这两种方法的区别在哪里?
更新:我发现显然只有在输入字母后按Enter才能有效传输数据。不知何故'\n'在从QStringQByteArray的转换中丢失了。我怎么能保留它?

3 个答案:

答案 0 :(得分:1)

你应该像这样在你的Qstring中添加一个输入

QString a = "Q\x00D";

答案 1 :(得分:0)

在你给出的例子中,QString中没有“\ n”!它不是迷路,它首先不存在。

如果需要换行符,则将字符串构造为QString a = "Q\n"

您也可以直接从字符数组构造QByteArray,而不是通过char数组 - &gt; QString - &gt; QByteArrray转换序列,如下所示:

QByteArray b("Q\n");

编辑:我意识到你刚刚发送字母“Q”的人为例子可能是调试尝试,而不是你真正的代码。实际上,您从一些发出QByteArray的其他信号中获取数据作为QByteArray。您收到的QByteArray不得在其中包含换行符。如果您正在读取文件或用户输入,那么这是正常的。大多数类似readline的函数都会删除尾随换行符。如果始终需要换行,您可以在WriteData方法中执行类似的操作:

void MainWindow::writeData(const QByteArray &data)
{
    serial->write(data);
    serial->write("\n");
}

如果传入的QByteArray有时在最后有换行符,有时候没有,并且你的接收设备无法处理冗余换行符,那么你需要检查数据是否以换行符结尾并且只写“\ n”如果没有。

答案 2 :(得分:0)

如果你像这样NA

怎么办?
QByteArray