Witam.
W programowaniu obiektowym jestem zielony. Muszę niestety napisać (na zaliczenie) dosyć, jak dla mnie, skomplikowany program.
Mój problem zapewne spowodowany jest moim nierozumieniem niektórych podstaw progrmowania obiektowego ale opiszę go w kontekście mojego zadania.
Mam:
- algorytm, który liczy, czasami długo
- Qt: okno, a w nim guziki, labele, glWidget i inne
Do jegnego guzika "podpiąłem" funkcję, która inicjalizuje wyświetlanie i algorytm, do drugiego -- jedna iteracja algorytmu, do trzeciego -- pętla, w której wykonuje się wiele razy to, co pod drugim guzikiem.
Wszystko robilem na wzór przykładowej aplikacji z tutoriala Qt. Wszystkie widgety, i obiekt "zajmujący się" algorytmem tworzę (moj_obiekt = new Moja_klasa) w funkcjach należących do klasy Window (okno aplikacji): widgety w konstruktorze, algorytm w slocie guzika inicjującego.
Oczywiście problem w tym, że na czas wykonywania algorytmu okno aplikacji jest nieużywalne. Doszedłem już do tego, że należy utworzyć wątek. Jest to kolejny obiekt.
Trzeba zaimplementować void JakiśThread::run(). Z tego run() chcę uruchomić Window::doStep(), który jest slotem jednego z guzików oraz mieć dostęp do innych widgetów okna. Próbowałem stworzyć obiekt klasy JakiśThread tak, jak obiekt algorytmu ale nie umiałem się z run() odwołać do widgetów i funkcji doStep().
Czy można to jakoś łatwo zrobić? Być może struktura mojego programu jest bardzo nieodpowiednia i można to zrobić lepiej. Jeżeli tak, bardzo proszę o sugestie.
PS. Toolkit i sposób wyświetlania danych (u mnie OpenGL) mogłem wybrać dowolny. Zdecydowałem się na Qt i OpenGL, bo po słyszałem, że to łatwe. Do Qt nie nie znalazłem niczego prócz specyfikacji i tutoriala od producenta, a to okazuje się dosyć trudne dla osoby z moją wiedzą.