ich habe ein Problem mit dem readyRead Signal der RS232 Schnittstelle, man findet zwar polling Lösungen im Netz die bei mir auch funktionieren aber ich möchte es gern
Event gesteuert. Timer klar ist eine Option, aber vielleicht hat ja noch wer eine andere Lösung.
folgende Header:
Code: Alles auswählen
class Communication : public QObject
{
Q_OBJECT
public:
explicit Communication(QObject *parent = 0);
signals:
private:
//****************member*****************
QSerialPort* _serialPort;
QStringList* _serialData;
//***************function****************
void initializeSerialPort(void);
private slots:
void readData(void);
};
die .cpp
Code: Alles auswählen
Communication::Communication(QObject *parent) :
QObject(parent)
{
_serialPort = new QSerialPort(this);
_serialData = new QStringList();
initializeSerialPort();
}
void Communication::initializeSerialPort(void)
{
//_serialPort->setPortName("COM27");
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
_serialPort->setPort(info);}
if(_serialPort->open(QIODevice::ReadWrite))
{
//Now the serial port is open try to set configuration
_serialPort->setBaudRate(QSerialPort::Baud9600);
_serialPort->setDataBits(QSerialPort::Data8);
_serialPort->setParity(QSerialPort::NoParity);
_serialPort->setStopBits(QSerialPort::OneStop);
_serialPort->setFlowControl(QSerialPort::NoFlowControl);
qDebug()<<"Port OPEN";
}
connect(_serialPort, SIGNAL(readyRead()), this, SLOT(readData()), Qt::QueuedConnection);
}
void Communication::readData(void)
{
if(_serialPort->isReadable())
{
QString msg;
qDebug()<<_serialPort->readAll();
msg = _serialPort->readAll();
_serialData->append( msg.split(";"));
}
}
Besten Gruß
MrCrank