Qt Threads Anzeige akutalisieren
Verfasst: 28.02.2012, 20:50
Ich habe ein paar längere Berechnungen und möchte dafür jetzt Zwischenergebnisse anzeigen. Mit einem QThread konnte man die Berechnung auch sehr einfach auslagern, ohne dass die GUI blockiert, aber es scheint gar nicht so einfach zu sein, jetzt in der GUI aktuelle Zwischenwerte anzuzeigen. Die Doku sagt nur:
Mein Momentaner Ansatz geht etwa so:
Ich benutze dafür die cout Umleitung aus dem anderen Thread. Die Ergebnisse sollen also im Arbeitsthread mit cout ausgegeben werden und im Hauptthread in der Konsole (als Qt Widget) ausgegeben werden. Aber ich krieg immer die Assertion, dass ich keine Signale von Objekten aufrufen kann, die meinem Thread nicht gehören.
Wie kann ich das lösen/umgehen?
Also, dass ich keine GUI-Elemente direkt ansprechen kann, mag ja noch verständlich sein. Aber wenn dieser Signal&Slots Mechanismus über Threads funktioniert, dann müsste es doch eigentlich gehen, wenn ich aus dem Arbeitsthread ein Signal im Hauptthread aufrufe und dort das Widget aktualisiere? Denn ansonsten wäre es wirklich unmöglich, Zwischenzustände anzuzeigen? Das kann ich mir irgendwie nicht vorstellen.In practice, the impossibility of using GUI classes in other threads than the main thread can easily be worked around by putting time-consuming operations in a separate worker thread and displaying the results on screen in the main thread when the worker thread is finished.
Mein Momentaner Ansatz geht etwa so:
Code: Alles auswählen
std::streamsize ConsoleWidgetStream::write(const char* s, std::streamsize n)
{
emit m_Target.Write(std::string(s, (int)n));
return n;
}
Wie kann ich das lösen/umgehen?