2017-09-19 7 views
0

私は比較的総デバイス(2台のコンピュータはCOMポート経由で接続されています)を持っていますので、QSerialPortで動作させる必要があります。アイデアは単純です:データはCOMポートごとに1つのコンプから別のコンプに送信されます。 トランスミッタが正常に機能しています。これはサイドソフトウェアでチェックされていますが、データの受信に問題があります。まず信号readyRead()がスロットを実行しません

私は、ポートの設定:次のように私はQSerialPortでそれをやっている

QSerialPort *serialport = new QSerialPort(); 
serialport->open(QIODevice::ReadOnly); 
serialport->setPortName("COM1"); 
serialport->setBaudRate(QSerialPort::Baud19200); 
serialport->setDataBits(QSerialPort::Data8); 
serialport->setParity(QSerialPort::NoParity); 

をして、私はこのようなデータをキャッチするために準備をしています:

connect(serialport,SIGNAL(readyRead()),this, SLOT(change_gear())); 

とスロットchange_gearではまだありません私は何も持っていません。 qDebug()< < "データが受信されました"、

このスロットは電子メールではありませんver実行! ... だから、私はちょうどここに間違って何が起こっているのか理解できないと、なぜ私は、COMポートなどの簡単な方法からデータを読み取ることができません

OS

- Windowsの8、 のQt 5.8.0 MinGWの32

+2

次の命令 'serialport->オープン(のQIODevice ::読み取り専用)をスロットに接続されている;'パラメータ – eyllanesc

+0

現在QSerialPort 5を設定した後に実行されなければなりません.9パラメータ設定後に開く必要はありませんが、そのようにする方が便利です。ポートが開いたら、いつでもパラメータを変更できます。ケーブルのもう一方の端にあるデバイスがどのように反応するかは別の質問です。 私は上記の質問に対するこの明確化は、それが困難で速いルールであることを意味するので、正当であると感じました。 – guitarpicva

答えて

1

のように試してみてくださいこの

QSerialPort *serialport = new QSerialPort(); 
serialport->setPortName("COM1"); 
serialport->setBaudRate(QSerialPort::Baud19200); 
serialport->setDataBits(QSerialPort::Data8); 
serialport->setParity(QSerialPort::NoParity); 

connect(serialport,SIGNAL(readyRead()),this, SLOT(change_gear())); 

serialport->open(QIODevice::ReadOnly); 

ポートが設定された後に開き、それが信号

+0

これは「ルール」ではありません。 QSerialPort(> = 5.3)を使用して信号をスロットに接続するときは、違いはありません。私はそれを両方の方法で行い、両者の間に違いは見当たりません。実際には、開いているポートがないときに接続する必要はほとんどないため、通常はシリアルポートが開いていることが確認されるまでconnect文を保存します。 – guitarpicva

関連する問題