0

serial.readall5.3.1 では空のバッファを返していますが、5.3.0 では同じコードが機能しています。誰かが同じ問題に直面しましたか?これに対する回避策はありますか?

Qt を MSVC 2010 Windows 7 で使用しています。Qt ダウンロード ページから「Windows 32 ビット用 Qt 5.3.1 (VS 2010、OpenGL、537 MB)」をダウンロードしました。

私のコード:

portname=ui->lineEdit->text();
serial.setPortName(portname);
if(serial.open(QIODevice::ReadWrite))
{
    ui->pushButton_5->setText("Device Connected");
    ui->pushButton_5->setStyleSheet("background : yellow");
    if(!serial.setBaudRate((QSerialPort::Baud115200),QSerialPort::AllDirections))
                qDebug()<<serial.errorString();
    if(!serial.setDataBits(QSerialPort::Data8))
                qDebug()<<serial.errorString();
    if(!serial.setParity(QSerialPort::NoParity))
                qDebug()<<serial.errorString();
    if(!serial.setStopBits(QSerialPort::OneStop))
                qDebug()<<serial.errorString();
    if(!serial.setFlowControl(QSerialPort::HardwareControl))
                qDebug()<<serial.errorString();
}
else
{
     qDebug()<<"Serial port not opened. Error: "<<serial.errorString();
     QTest::qSleep(2000);
     exit(0);
}
serial.write(outbuff, l);
rsp=(serial.readAll()).toHex();

serial.readAll は空のバッファを返します。別のツールから同じ入力を送信すると、同じ HW から応答が返ってきます。

4

1 に答える 1

0

ドキュメントから読む:

QByteArray QIODevice::readAll()

これはオーバーロードされた関数です。

デバイスから利用可能なすべてのデータを読み取り、QByteArray として返します。

この関数にはエラーを報告する方法がありません。空の QByteArray() を返すことは、現在読み取り可能なデータがないか、エラーが発生したことを意味します。

ここでの重要な事実は、デバイスから利用可能なreadAll()すべてのデータを読み取ることですが、呼び出し時に、データを待機しているデバイスが既に応答しているという保証はありません...serial.readlAll()

コードが Qt 5.3.0 で動作しているという事実はランダムだと思います...

関数をオブジェクトのserial.waitForReadyRead(...)シグナルに接続してからserial.readAll()利用可能なそのスロットからのデータ。readyRead()serial

于 2014-08-27T06:31:34.243 に答える