QListView reagiert nicht mehr nach Bearbeitung mit QThread

Alles rund um die Programmierung mit Qt
Antworten
Frank Kose
Beiträge: 8
Registriert: 1. November 2007 12:14
Wohnort: Berlin
Kontaktdaten:

QListView reagiert nicht mehr nach Bearbeitung mit QThread

Beitrag von Frank Kose »

Hi,

Eigentlich ganz einfach. Ich habe ein QListView, in dem ich eine Datenübersicht (Buchungsdaten) habe. Da die Operationen darauf etwas länger dauern können, wollte ich die Rechenarbeit auf einen Thread auslagern. Da liegt auch noch nicht das Problem. Ich habe einen Zeiger auf das QListView einfach dem QThread als Zeiger übergeben. Die Operationen werden getätigt und jetzt kommts:

Nach Abschluß des Threads reagiert das QListView nicht mehr auf Maussignale. Diese werden registiert aber die Neuzeichnung wird nicht ausgelöst. Das zeigt sich indem man das Widget, indem das ListView steckt kurz minimiert und wieder maximiert und damit extern dies auslöst.

Ich habe versucht dies zu umgehen, in dem ich die Informationen eines Items in QStringlist übergeben und wieder zurückgegeben habe. Selbe Reaktion.

Vieleich liegt das an der Version. Ich arbeite mit QT 3.3.3.

Vielen Dank für jede eventuelle Hilfe, Gruß, Frank : :roll:
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Man kann nur aus dem MainThread heruas zeichnen. In den anderen Threads kann man zwar berechnen, aber nichts auf die Gui ausgeben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Frank Kose
Beiträge: 8
Registriert: 1. November 2007 12:14
Wohnort: Berlin
Kontaktdaten:

Hmmmm.....

Beitrag von Frank Kose »

Hi Christian,

auf jeden Fall erst mal danke für die schnelle Antwort.

Wie übergebe ich dann Daten aus einem ListView an den Thread zum berechnen und umgekehrt ohne das ich den Mainthread ändere. Sagen wir mal in der ersten und zweiten Spalte stehen Summanden und in der dritten soll die Summe erscheinen. Und das für "ganz,ganz viele".

Ich hatte die Informationen ja schon in einen "Container" als Stringliste (Strings entsprechen Einträgen in den Spalten) übergeben, die Berechnung ausgeführt und diese wieder in den ListView rüberkopiert.

Vielen Dank, Frank
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Der GUI-Thread muss die Daten im ListView ändern. Wie Du das machst ist deine Sache. Entweder per gemeinersamer Variable oder per Signal/Slot - Verbindung zwischen Main- und Workerthread.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Frank Kose
Beiträge: 8
Registriert: 1. November 2007 12:14
Wohnort: Berlin
Kontaktdaten:

Ich probiere es aus...

Beitrag von Frank Kose »

Hi Christian,

klingt sehr plausibel. Mit der gemeinsamen Variable (Zeiger auf Listview ist für Main- und Workerthread identisch) habe ich es ja probiert, funktioniert nicht. Mit der SIGNAL/SLOT-Verbindung habe ich das Problem, dass , meiner Meinung nach, nur Ableitungen von QObject Signale emittieren können, was ein Thread nicht ist.

Mit QCustomEvent kann ich Events signalisieren, aber auch dann geschieht das gleiche - das ListView reagiert nicht. Bin ich vieleicht zu blöd?

Wie auch immer, ich probiere erst mal rum. Deine Message war ja klar.

Auf jeden Fall, vielen Dank.
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Re: Ich probiere es aus...

Beitrag von dhcase »

Frank Kose hat geschrieben:Mit der SIGNAL/SLOT-Verbindung habe ich das Problem, dass , meiner Meinung nach, nur Ableitungen von QObject Signale emittieren können, was ein Thread nicht ist.
QThread ist doch von QObject abgeleitet...
Qt-Doku hat geschrieben:The QThread class provides platform-independent threads.
Inherits QObject.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Ich probiere es aus...

Beitrag von Christian81 »

Frank Kose hat geschrieben: klingt sehr plausibel. Mit der gemeinsamen Variable (Zeiger auf Listview ist für Main- und Workerthread identisch)
Das ist doch aber ein GUI-Element in das Du dann direkt zeichnest!!!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Frank Kose
Beiträge: 8
Registriert: 1. November 2007 12:14
Wohnort: Berlin
Kontaktdaten:

Hi dhcase, meine Qt-Doku...

Beitrag von Frank Kose »

sagte "Inherits Qt". Und "Qt inherited by QObject..." Ich denke, das QTHread und QObject dann zwei Ableitungen von Qt sein müßten.

Vieleicht ist der Unterschied versionsbedingt.

Gruß, Frank
Frank Kose
Beiträge: 8
Registriert: 1. November 2007 12:14
Wohnort: Berlin
Kontaktdaten:

Hi Christian...

Beitrag von Frank Kose »

.....eigentlich müßte es mit diesem GUI-Element ja auch klappen. Ich probiere es noch einmal aus.

Bis morgen, Frank.
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Ich sehe gerade erst, dass du mit Qt 3 arbeitest... Signale über Thrad-Grenzen hinweg gehen erst ab Qt 4, das ist dann wohl keine Option für dich.
Frank Kose
Beiträge: 8
Registriert: 1. November 2007 12:14
Wohnort: Berlin
Kontaktdaten:

Moin, moin...

Beitrag von Frank Kose »

..hi dhcase, das war dann mal ein klarer Schritt weiter, auch wenn negativ. Auf jeden Fall, ich bin neu im Forum und freue mich über die prompten Antworten, spart viel Zeit. Wenn ich weiterhelfen kann, werde ich es genauso tun...

Bis denne, Frank
Antworten