QT Repaint / Redraw / Update / Do Something

Jestem nowy w QT. Rozumiem, że możesz wymusić odświeżenie ekranu, ale wyciągnąłem wszystkie włosy, próbując dowiedzieć się, jak to zrobić. Oto, co właśnie staram się zrobić.

Naciskam przycisk (zdarzenie sygnału onClick), który uruchamia kod, który zmienia obraz (QLabel) na wyświetlaczu, czeka na wejście, a następnie przechodzi przez zmianę nowego obrazu (inny QLabel). Próbowałem wszystkiego, a wyświetlacz nie odświeża się, dopóki kod zdarzenia onclick nie zostanie ukończony. W tej chwili nie czekam na dane użytkownika, używam usleep (~ 500 ms) do celów testowych.

Z tego, co czytam, QT jest sterowane zdarzeniami, co oznacza, że ​​w zasadzie tworzę wiązkę zdarzeń, które są umieszczane w kolejce i wykonywane, gdy (zdarzenie sygnału onClick) powraca do (pętli głównej) / (obsługi zdarzeń). Nie chcę czekać, aż funkcja zostanie ukończona, uczyni to program niezwykle bolesnym, jeśli będę musiał wykonać tę procedurę całkowicie w oparciu o zdarzenia.

Jak mogę zmusić mapę pikseli QLabel do odświeżenia. Próbowałem wszystkiego. Poniżej znajduje się cały kod próbowałem w mojej obsługi zdarzenia sygnału onClick. (upButton to nazwa QLabel, która jest mapą pikseli)

update();
repaint();
ui->upButton->setUpdatesEnabled(TRUE);
update();
repaint();
QPaintEvent paintevent(ui->upButton->childrenRegion());
QPaintEvent * test = &paintevent;
paintEvent(test);
this->changeEvent(test);
ui->upButton->update();
ui->upButton->repaint();
ui->upButton->repaint(ui->upButton->childrenRegion());
repaint();
QApplication::sendPostedEvents();
this->parentWidget()->update();
usleep(100000);

Jak widać, właśnie strzelam w ciemności w tym momencie. Próbowałem przyjrzeć się przykładowemu kodowi i wykonać całą pracę domową, ale zgubiłem się. Doceń wszelką pomoc, poradę lub przykładowy kod.

questionAnswers(4)

yourAnswerToTheQuestion