0

Python で書かれたアプリケーションを C++ で書き直そうとしています。

シリアル ポートを開いて xml を読み取るだけです。Pythonでは、pyserialを使用してxmlを読み取り、beautifulsoupを使用して情報を取得していました。出来上がりはこんな感じでした。

<file><property>xx32</property></file>

今、qextserialport を使用してシリアル ポートから読み取っています。取得した xml は次のようなものです。

<
fil
e>
<prope
rty>xx32
</prop
erty>
</
file>

私の問題は、このようなxmlを解析できないことです。エラーが発生します。

編集:


Qextserialport は、固定されていない一連のバイトでシリアル ポートからデータを読み取ります。では、xml を 1 つの文字列に連結するにはどうすればよいでしょうか。シリアル ポートから 4 ~ 5 秒ごとに xml 文字列を取得します。

ここに私のコードがあります

this->port = new QextSerialPort(com_port,QextSerialPort::EventDriven);
port->setBaudRate(BAUD57600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setTimeout(0);

if (port->open(QIODevice::ReadOnly) == true)
{
    //qDebug()<< "hello";
    connect(port,SIGNAL(readyRead()),this,SLOT(onReadyRead()));
}

そして、シリアルポートから実際に読み取る関数

void CurrentCost::onReadyRead()
{
    QByteArray bytes;
    bytes = port->readAll();

    //qDebug() << "bytes read:" << bytes.size();
    //qDebug() << "bytes:" << bytes;
    ui->textBrowser->append(bytes);

}
4

1 に答える 1

0

私はこのようなものを意味します:

class CurrentCost...{

private:
    QByteArray xmlData;
private slots:
   void onReadyRead();

};

void CurrentCost::onReadyRead()
{
    xmlData.append(port->readAll());

    if(xmlData.endsWith(/*what your port sending then xml is over&*/))
    {
        ui->textBrowser->append(xmlData);
        xmlData.clear();
    }

}
于 2011-07-09T17:00:44.650 に答える