2010-01-27 16 views
11

Ich habe eine Methode, die sowohl von QThreads und dem Hauptthread aufgerufen wird. Diese Methode kann manchmal eine lange Zeit dauern, um ihre Berechnungen in einer Schleife durchzuführen, also setze ich QCoreApplication::processEvents() und dies verhindert das Einfrieren der GUI. Irgendwann hatte ich QCoreApplication::processEvents() für QApplication::processEvents() geändert, aber das verursachte die GUI zu frieren (ich bin ziemlich sicher, das war was fereezing es, weil ich QCoreApplication::processEvents() zurück, es nicht wieder eingefroren) Bin ich richtig zu denken, dass Aufruf QApplication::processEvents() aus dem Haupt-Thread und QThreads können die GUI einfrieren?Sollte ich QCoreApplication :: processEvents() oder QApplication :: processEvents() verwenden?

Antwort

11

Weder processEvent() sollte nur aufgerufen werden, wenn Sie aktuelle ausstehende Ereignisse verarbeiten müssen. Sie können dies nützlich finden: How to make Qt work when main thread is busy?

+0

Ich werde QtConcurrent :: run versuchen. Kann ich dort GUI-Operationen machen oder sollte ich noch Signale aussenden wie für den Fall eines QThread –

+1

@yan bellavance: Sie sollten Signale aussenden, da es in einem separaten Thread sein wird. Oder du könntest das QFuture-Material benutzen, um die Signale für dich zu erzeugen und zu senden. –

10

Sie werden viel besser aus dem lang laufenden Prozess aus dem Haupt-Thread verschieben, so dass Sie nicht anrufen müssen processEvents(). Innerhalb dieses langwierigen Prozesses können Sie alle Signale aussenden, die Sie benötigen, damit die GUI genügend Informationen für Aktualisierungen usw. hat. processEvents ist jedoch normalerweise eine Krücke für ein schlechtes Design.

+0

Ich werde QtConcurrent :: run versuchen. Kann ich dort GUI-Operationen ausführen oder sollte ich noch Signale ausgeben wie für den Fall eines QThreads –

+0

Gui-Operationen können nur im Haupt-Thread ausgeführt werden. QtConcurrent ist eine gute Idee, besonders wenn Sie Ihre Arbeit auf mehrere Kerne verteilen können. –

Verwandte Themen