2017-09-19 2 views
0

J'ai un périphérique relativement grossier (deux ordinateurs sont connectés via le port COM) et je dois le faire fonctionner par QSerialPort. L'idée est simple: les données vont envoyer d'un comp à un autre par port COM. Transmetteur fonctionne bien, qui a été vérifié par le logiciel côté, j'ai des problèmes avec la réception de données. Je le fais par QSerialPort comme suit:Le signal readyRead() n'exécute pas l'emplacement

Au début, je mis en place le port:

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

et je me prépare à prendre des données comme ceci:

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

et encore change_gear fente Je n'ai rien de plus que: qDebug() < < "Les données ont été reçues",

mais cette fente n'a pas été e ver exécuté! Donc, je ne peux pas comprendre ce qui se passe mal ici et pourquoi je ne peux pas lire les données à partir de ports COM de manière facile ..

OS - Windows 8, Qt 5.8.0 MinGW 32

+2

L'instruction suivante 'serialport-> open (QIODevice :: lecture seule);' doit être exécutée après le réglage des paramètres – eyllanesc

+0

Current QSerialPort 5 .9 ne nécessite pas d'ouverture après la configuration des paramètres, mais il est plus pratique de le faire de cette manière. Vous pouvez modifier les paramètres à volonté une fois le port ouvert. Comment l'appareil à l'autre bout du câble va réagir est une autre question. J'ai senti que cette clarification à la question ci-dessus était justifiée car elle implique que c'est une règle dure et rapide. – guitarpicva

Répondre

1

Essayez comme ce

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); 

ouvert après port est configuré et ce signal est connecté à la fente

+0

Ce n'est pas une "règle". Cela ne devrait faire aucune différence lorsque vous connectez des signaux aux slots avec QSerialPort (> = 5.3). Je le fais dans les deux sens et ne trouve aucune différence entre les deux. En fait, il y a peu de désir de faire des connexions quand il n'y a pas de port ouvert, donc j'économise généralement les instructions de connexion jusqu'à ce que j'ai vérifié que le port série a été ouvert. – guitarpicva