Bonsoir,
Tout d'abord quelques remarques :
- Attention à cette indentation trompeuse :
1 2 3
| if (!(port->lineStatus() & LS_DSR))
qDebug() << "warning: device is not turned on";
qDebug() << "listening for data on" << port->portName(); |
est équivalent à :
1 2 3 4
| if (!(port->lineStatus() & LS_DSR)) {
qDebug() << "warning: device is not turned on";
}
qDebug() << "listening for data on" << port->portName(); |
- open() retourne déjà un booléen => if (port->open(QIODevice::ReadWrite)
== true) { - Enfin,
1 2
| port->read(bytes.data(), bytes.size());
qDebug() << "bytes read:" << bytes.size(); |
Le nombre d'octets lus n'est pas obligatoirement la taille bytes.size() que tu passes, mais la valeur que retourne la fonction read().
Afin de faire ce tu souhaites, crée-toi un signal dans ta classe :
1 2 3 4 5
| class PortListener {
...
signals:
void valuesAvailable(QByteArray const &);
}; |
connecte-le dans ton main() à la partie que tu souhaites exécuter à la réception :
1 2 3 4
| PortListener listener(portName);
QObject::connect(&listener, &PortListener::valuesAvailable, [](QByteArray const & sensor_value) {
// ...
}); |
et émets-le dans ton slot onReadyRead() :
emit valuesAvailable(bytes);
Partager