also um den qextserielport zu verwenden, einfach entpacken und die einzelnen *.cpp und *.h in deinem projekt hinzufügen.
dann in der qextserielport.h einen #define setzen damit auch die richtige datei included wird, ist recht selbsterklärend (die windows oder linux)
bedenke, dass ein signal (ich glaube readyread oder so ähnlich) nicht funktioniert. (falls es bei dir funktioniert, dann bitte um rückmeldung )
dadurch ist es nötig, einen qtimer zu verwenden der dann nach neuen daten polled..
wenns ist kann ich auch kurz ein beispiel posten
greetz
edit: hier das beispiel
myserial.cpp:
Code:
#include "myserial.h"
MySerial::MySerial()
{
interval = MININTERVAL;
y = new QextSerialPort("/dev/ttyS0");
y->setBaudRate(BAUD9600);
y->setDataBits(DATA_8);
y->setStopBits(STOP_1);
y->setParity(PAR_NONE);
y->setFlowControl(FLOW_OFF);
y->setTimeout(0,1);
}
MySerial::~MySerial()
{
t->stop();
y->close();
QObject::disconnect(t,SIGNAL(timeout()),this,SLOT(pollSerial()));
delete y;
delete t;
}
void MySerial::run()
{
t = new QTimer();
t->setInterval(MININTERVAL);
if(!y->open(QIODevice::ReadOnly))
{
qDebug() << "Couldnt open Serial device.";
return ;
}
y->flush();
QObject::connect(t,SIGNAL(timeout()),this,SLOT(pollSerial()));
t->start();
exec();
}
void MySerial::close()
{
quit();
}
void MySerial::pollSerial()
{
QString a;
qint64 i;
if(y->isReadable())
{
a = "";
i = y->bytesAvailable();
if(i > 0)
{
a.append(y->read(i));
emit dataReceived(a);
}
}
}
myserial.h:
Code:
#ifndef MYSERIAL_H
#define MYSERIAL_H
#include <QObject>
#include <QTimer>
#include <QDebug>
#include <QThread>
#include "qextserialport.h"
#define MININTERVAL 25
class MySerial : public QThread
{
Q_OBJECT
public:
MySerial();
~MySerial();
void run();
void close();
private:
QextSerialPort *y;
QTimer *t;
int interval;
private slots:
void pollSerial();
signals:
void dataReceived(QString);
};
#endif // MYSERIAL_H
Lesezeichen