readyRead() löst nicht aus wieso?
readyRead() löst nicht aus wieso?
Hallo Allerseits!
Ich arbeite gerade an einer Applikation die über die Serielle Schnittstelle Messdaten aufnehmen soll.
In meiner ersten version ist das durch drücken eines receive Buttons geschehen-->
connect(transmitButton, SIGNAL(clicked()), SLOT(transmitMsg()));
QPushButton *receiveButton = new QPushButton("Receive");
daraufhin wird der gelesene Inhalt angezeigt-->
void QespTest::receiveMsg()
{
char buff[1024];
int numBytes;
numBytes = port->bytesAvailable();
if(numBytes > 0)
{
if(numBytes > 1024) numBytes = 1024;
int i = port->read(buff, numBytes);
buff = '\0';
QString msg = buff;
received_msg->append(msg);
received_msg->ensureCursorVisible();
qDebug("bytes available: %d", numBytes);
qDebug("received: %d", i);
qDebug("msg: %d", buff[1]);
qDebug("msg: %d", buff[2]);
}
Ich wollte jetzt mit readyRead() eine art automatische Ausgabe der daten gestallten, leider geht das aber nicht da readyRead() nicht ausgelöst wird weiß einer wieso? Steh total auf dem Schlauch, weil nach meinem Verständnis hätte es so gehen müssen-->
connect (port, SIGNAL (readyRead()), SLOT (receiveMsg()));
Ich arbeite gerade an einer Applikation die über die Serielle Schnittstelle Messdaten aufnehmen soll.
In meiner ersten version ist das durch drücken eines receive Buttons geschehen-->
connect(transmitButton, SIGNAL(clicked()), SLOT(transmitMsg()));
QPushButton *receiveButton = new QPushButton("Receive");
daraufhin wird der gelesene Inhalt angezeigt-->
void QespTest::receiveMsg()
{
char buff[1024];
int numBytes;
numBytes = port->bytesAvailable();
if(numBytes > 0)
{
if(numBytes > 1024) numBytes = 1024;
int i = port->read(buff, numBytes);
buff = '\0';
QString msg = buff;
received_msg->append(msg);
received_msg->ensureCursorVisible();
qDebug("bytes available: %d", numBytes);
qDebug("received: %d", i);
qDebug("msg: %d", buff[1]);
qDebug("msg: %d", buff[2]);
}
Ich wollte jetzt mit readyRead() eine art automatische Ausgabe der daten gestallten, leider geht das aber nicht da readyRead() nicht ausgelöst wird weiß einer wieso? Steh total auf dem Schlauch, weil nach meinem Verständnis hätte es so gehen müssen-->
connect (port, SIGNAL (readyRead()), SLOT (receiveMsg()));
„The rich can not live on an island surrounded by poverty.We all breathe the same air.We should give everyone a chance,at least a fundamental chance.“ (Ayerton Senna)
musst du beim connect nicht als 3. parameter das zielobjekt angeben??
etwa so:
etwa so:
Code: Alles auswählen
connect(buttonPtr, SIGNAL(clicked()), targetPtr, SLOT(targetSlot()));
Also meine Signal Slot eingabe mit
connect(transmitButton, SIGNAL(clicked()), SLOT(transmitMsg()));
hat tadelos funktioniert bis jetzt.
Wenn ich im Debug Modus recieve Button auslöse kann ich es durch gesetzte Breakpoints auch verfolgen..daran dürfte es eigentlich nicht liegen...
Welche weiter eingabe sollte es den sein?
connect(transmitButton, SIGNAL(clicked()), SLOT(transmitMsg()));
hat tadelos funktioniert bis jetzt.
Wenn ich im Debug Modus recieve Button auslöse kann ich es durch gesetzte Breakpoints auch verfolgen..daran dürfte es eigentlich nicht liegen...
Welche weiter eingabe sollte es den sein?
„The rich can not live on an island surrounded by poverty.We all breathe the same air.We should give everyone a chance,at least a fundamental chance.“ (Ayerton Senna)
Hast Du es probiert? Gibt es eine Ausgabe vom connect(..) im Debug Modus? Es sollte nämlich immer ein Empfänger beim connect angegeben werden.Parcivall hat geschrieben:Wenn ich im Debug Modus recieve Button auslöse kann ich es durch gesetzte Breakpoints auch verfolgen..daran dürfte es eigentlich nicht liegen...
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
@macman: mein Empfänger ist doch angegeben durch SLOT(recieveMSG()) oder habe ich da etwas falsch verstanden bei der def. von Signal Slot?
(Arbeite noch nicht so wirklich lange an QT-Programmen)
@Christian81: Ich benutze die qextserial 1.0.0 Klasse die ja so weit ich das richtig intepretirt habe vo Qiodevice vererbt worden ist...
also müsste doch readyRead() auch gehen oder
Ich Newbie ich dumme Fragen stellen darf... 
(Arbeite noch nicht so wirklich lange an QT-Programmen)
@Christian81: Ich benutze die qextserial 1.0.0 Klasse die ja so weit ich das richtig intepretirt habe vo Qiodevice vererbt worden ist...
also müsste doch readyRead() auch gehen oder
„The rich can not live on an island surrounded by poverty.We all breathe the same air.We should give everyone a chance,at least a fundamental chance.“ (Ayerton Senna)
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Nur weil QIODevice dieses Signal senden kann, heisst es noch lange nicht dass es von QExtSerial auch gesendet wird. Und soviel ich weiss macht dies SerialDevice nicht da es nicht so ohne weiteres möglich ist.Parcivall hat geschrieben: @Christian81: Ich benutze die qextserial 1.0.0 Klasse die ja so weit ich das richtig intepretirt habe vo Qiodevice vererbt worden ist...
also müsste doch readyRead() auch gehen oder![]()
Musst wohl oder übel per QTimer alle paar msecs pollen um zu schauen ob neue Daten vorhanden sind.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Mit Timer habe ich es probiert...
Dieser tut auch..leider bringt er die daten etwas unregelmäsig...
Fällt Dir was anderes ein womit ich das event gesteuert machen könnte?
Mein Ziel ist es regelmäßig Datenpackete von RS232 abzuholen und diese zu speichern, und dies wiederum in einem Thread, so das die "Aufnahme" für sich getrennt abläuft. Die Visualsierung sollte dann auch durch einen Thread erfolgen...
Ich hätte den Producer Consumer Thread dafür ausgewählt da ich denke das es für diese Situation am meisten geeignet ist.
Deshalb habe ich ein wenig scheu vor einem Timer weil ich bedenken habe das es mit Threads passieren könnte das Daten verloren gehen..oder liege ich da auf dem falschen Dampfer?
Vielen vielen Danke für die schnelle Antworten

Dieser tut auch..leider bringt er die daten etwas unregelmäsig...
Fällt Dir was anderes ein womit ich das event gesteuert machen könnte?
Mein Ziel ist es regelmäßig Datenpackete von RS232 abzuholen und diese zu speichern, und dies wiederum in einem Thread, so das die "Aufnahme" für sich getrennt abläuft. Die Visualsierung sollte dann auch durch einen Thread erfolgen...
Ich hätte den Producer Consumer Thread dafür ausgewählt da ich denke das es für diese Situation am meisten geeignet ist.
Deshalb habe ich ein wenig scheu vor einem Timer weil ich bedenken habe das es mit Threads passieren könnte das Daten verloren gehen..oder liege ich da auf dem falschen Dampfer?
Vielen vielen Danke für die schnelle Antworten
„The rich can not live on an island surrounded by poverty.We all breathe the same air.We should give everyone a chance,at least a fundamental chance.“ (Ayerton Senna)
Damit gibst Du die Funktion an. Wenn diese Funktion aber nun in einer anderen Klasse oder einem anderen Objekt ist, dann musst Du den Empfänger auch angeben. Kann durchaus sein das es ohne geht, so lange Sender und Empfänger zur gleichen Klasse gehören. Hab ich nie probiert.Parcivall hat geschrieben:@macman: mein Empfänger ist doch angegeben durch SLOT(recieveMSG())
Ahaaaaa....
Ok das könnte natürlich sein das es deshalb nicht geht...da durch das vererben gerade readyRead nicht kommt...
Wundert mich nur das keine Fehlermeldung erscheint...
Ich hoffe Du bist jetzt nicht zu sehr geshockt
aber wie gebe ich das genau an von der Syntax her wenn Sender und Empfänger von verschiedenen Klassen sind...?

Ok das könnte natürlich sein das es deshalb nicht geht...da durch das vererben gerade readyRead nicht kommt...
Wundert mich nur das keine Fehlermeldung erscheint...
Ich hoffe Du bist jetzt nicht zu sehr geshockt
„The rich can not live on an island surrounded by poverty.We all breathe the same air.We should give everyone a chance,at least a fundamental chance.“ (Ayerton Senna)
readyRead() geht definitiv nicht in qextserial...
wer mich vom Gegenteil überzeugen kann nur her damit!
Danke vielmals für Unterstützung!!!
Werde es weiterhin mit einem Timer machen.
Habe vor die gesammten Daten die über serielle Schnittstelle hereinkommen entsprechend zu sortieren und abzulegen mittels Timer.
Das gesammte in einem Producer-Thread...
Mein Consumer-Thread ist dan die Visuallisierung des ganzen...
wer mich vom Gegenteil überzeugen kann nur her damit!
Danke vielmals für Unterstützung!!!
Werde es weiterhin mit einem Timer machen.
Habe vor die gesammten Daten die über serielle Schnittstelle hereinkommen entsprechend zu sortieren und abzulegen mittels Timer.
Das gesammte in einem Producer-Thread...
Mein Consumer-Thread ist dan die Visuallisierung des ganzen...
„The rich can not live on an island surrounded by poverty.We all breathe the same air.We should give everyone a chance,at least a fundamental chance.“ (Ayerton Senna)