Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Threads in KDevelop



Woeba
11-10-2004, 11:46
Hallo alle miteinander!
Ich bin seit Tagen auf der Suche nach einer Lösung für folgendes Problem und hoffe in diesem Forum kann mir jemand weiterhelfen:

Ich will mein erstes GUI Programm unter Linux erstellen, welches Daten aus einem USB<->Seriell Cip (FT245BM) ausliest und den ausgelesenen String ausgibt. Nun habe ich zwei Probleme:

Das debuggen in dem Thread, welcher den Chip ausliesst klappt nicht. Sobald sich das QT-Hauptfenster öffnet schmiert das Programm ab. Wenn der Debugger aus ist klappt es wunderbar.

Ich habe eine QComboBox, anhand welcher das Device ausgewählt werden soll. Nun habe ich einen Slot erstellt und mit einer connection über das Signal "textChanged" mit der QComboBox verbunden. Nur scheint der Slot nie anzusprechen, wenn ich ein anderes Item in der Combobox auswähle. :confused:

Ideen?

Danke schonmal


Info:
SuSE 9.1
KDevelop 3.1.0
gdb 6.2.1

paines
12-10-2004, 10:15
Wenn ich das richtig verstanden habe geht das nicht so einfach.

Also, verstehe ich es richtig, das du in einerm seperaten Thread Daten ausliest und diese dann in einem
Widget darstellen willst ? Das geht nicht ! Also, nicht
auf direktem Wege. Du kannst nicht aus einem
seperaten Thread heraus ein anderes Fenster bemalen, dies
darf nur der Hauptthread.

Ich mache das so:
In deinem MainThread/MainKlasse überschreibst du die Methode customEvent.
Das sieht dann ungefähr so aus:




class MainClass {
....
protected:
void customEvent(QCustomEvent *event)
{
switch(event->type)
{
case QEvent::User:
setText(new QString(event->data()));
break;
default:break;
}
}
.....
};

void MyTherad()
{
....
QEvent *event;

event = new QCustomEvent(QEvent::User);
event->setData(myUSBdata);
QApplication::postEvent(pointerToMainClass, event);
....
}
}



Also, es geht darum das du halt aus einem seperaten Thread der Main Klasse mitteilst das du etwas darstellen möchtest. Es wird ein customEvent abgeschickt mit den Daten, die Hauptklasse wird dann die EventQueue abarbeiten und dann auf deinen speziellen Event stossen den du dazu missbrauchst was auch immer zu tun.

Ich hab das vor ewig keiten mal so gelöst.
Hoffe jemand anders hat ne elegantere Lösung und teilst sie uns allen mit.


Gruss
paines

PS: Aus nem Timer heraus geht es driekt zu malen, wenn ich mich richtig erinnere.

anda_skoa
12-10-2004, 12:10
Eventuell besteht die Möglichkeit, das Device als Filedescriptor zu bekommen und dann mit QSocketNotifier zu arbeiten, statt einen extra Thread zu benutzen.

Ciao,
_

Woeba
14-10-2004, 08:58
Danke für die Info. Ich werde es mal austesten.