unerklärliche Verzögerung nach dem Laden von QProgressBar

Ich habe ein Signal von einer Schleife (die einige Berechnungen vornimmt) ausgesendet, das eine Fortschrittsanzeige-Aktualisierung auslöst, die sich auf der Haupt-GUI befindet. Nach Beendigung der Schleife wird die Fortschrittsanzeige auf 100% aktualisiert (die Fortschrittsanzeige wird ausgeblendet, wenn der Prozess endet) Es gibt eine Verzögerung, der Fortschrittsbalken bleibt auf 100% und manchmal wechselt die Maus zu beschäftigt, und erst nach wenigen Sekunden wird der Fortschrittsbalken ausgeblendet (zeigt mir an, dass die Verzögerung endet), nach dieser Schleife gibt es nichts, also nichts, was ich kann denkt an kann diese verzögerung machen.

Ich sollte beachten, dass es keine solche Verzögerung gibt, wenn die Schleifenberechnungen leicht sind (was bedeutet, dass nicht viele Berechnungen durchgeführt werden müssen).

Das Sendesignal befindet sich innerhalb einer Klasse in der Logikebene, ich habe etwas durch Einschließen versucht<QtGui/QApplication> In diese Klasse (was für mich nicht das Richtige ist, da dies die Logikebene ist, weshalb sie QtGui-Bibliotheken benötigen sollte, ich aber nur etwas teste) füge ich den folgenden Code einqApp->processEvents(); in der Schleife und jetzt scheint es ruhiger zu laufen, keine beschäftigte Maus, aber es gibt immer noch eine Verzögerung (das einzige, was ich anders mit der GUI reagieren kann, während diese Verzögerung auftritt, aber es gibt keine aktualisierten Ergebnisse bis diese Verzögerung endet).

Wegen des Tests mit demprocessEvents() Ich dachte, dass es etwas mit Threads zu tun hat, aber wenn ja, wie kann ich das Verzögerungsverhalten korrigieren? Wenn jemand denkt, dass es etwas anderes sein könnte, sagen Sie es bitte.

Einige Beispielcode:

Logikschichtklasse:

#include <QtGui/QApplication>
...

processMethod(...)
{
    Loop(...)
    {
        qApp->processEvents();
        emit processBarSignle(value);
        ...some calculations...
    }
    emit processBarSignle(100);
}

Ansichtsebene (MainWindow):

on_btn_nextProcess_clicked()
{
    m_ui->pBar_process->setVisible(true);
    LogicClass->processMethod(...);
    m_ui->pBar_process->setVisible(false);
}

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage