Wywoływanie cykliczne funkcji. Funkcja update okna.

Odpowiedz Nowy wątek
2018-08-10 10:29
0

Witam,
Mam trochę takie banalne pytanie, ale mnie to blokuje.

void Update()
{
    if(buttonExitClicked)
    {
        close();
    }
    else if(buttonDrawClicked)
    {
        draw();
    }
    else if(jakisBool)
    {
        mojaFunkcja();
        jakisBool = false;
    }
}

Może wyjaśnię to na przykładzie tej funkcji. Przytoczona przeze mnie funkcja włącza się przy odpaleniu programu i działa sobie w nieskończoność, czekając na wciśnięcie jakiegoś buttona i wykonanie danej funkcji.

I tu nasuwa się moje pytanie.
Czy aby w QT zrobić funkcję działającą na podobnej zasadzie muszę ustawić updatesEnabled na true i przeciążyć void QWidget::update(), aby dodać jakiś swój warunek, który będzie sprawdzany cały czas? Czy to jakoś inaczej się robi?
Chodzi mi o to, że jak funkcja pod jakimś buttonem zmieni jakąś wartość boolowską, to funkcja będzie działała tak jak funkcja, którą napisałem wyżej.

edytowany 1x, ostatnio: furious programming, 2018-08-11 15:11
Nie używaj prefiksów QT w tytułach wątków, skoro i tak w każdym dodajesz qt do tagów. - furious programming 2018-08-11 15:12

Pozostało 580 znaków

2018-08-10 10:43
2

Nie wiem co robisz, ale robisz to źle i chcesz by naprawić zły pomysł.
To się nazywa Problem XY i dopóki nie wyjaśnisz czym jest X nie mam zamiaru pomagać w naprawianiu Y.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-08-10 10:52
0

No rzeczywiście może nie wyszło mi tłumaczenie.
Chcę pobierać z urządzenia dane po naciśnięciu buttonaDraw(ustawienie globalnej zmiennej isClickedToDraw na true) i rysowaniu wykresów tak jakby w czasie rzeczywistym. Ponowne kliknięcie buttona powoduje ustawienie globalnej zmiennej isClickedToDraw na false i przerwanie rysowania i pobierania danych.
Mój problem polega na tym gdzie nie wiem dokładnie gdzie mam umieścić

if(isClickedToDraw)

Możliwe, że źle rozumiem, bo pisząc grę w unity w C# miałem funkcje start(), która wykonywała się przy uruchomieniu programu i funkcję update(), która wykonywała się cały czas i w niej umieszczałem takie ify.
A w Qt nie wiem gdzie mogę to umieścić.

edytowany 2x, ostatnio: furious programming, 2018-08-11 15:12

Pozostało 580 znaków

2018-08-10 11:23
2

Zmienna globalna == błędy

Źle to napisałeś.
Powinno iść w ten deseń (ponieżej ejst elpiej co masz ale nadal jest ułomne):

  1. sygnał z buttona wywołuje metodę z klasy Model (nazwa robocza)
  2. Model wysyła na urządzenie co ma wysłać
  3. Urządzenie wysyłą sygnał o nowych danych, Model to odbiera
  4. Model aktualizuje swoje dane wewnętrzne i wysyła o tym sygnał
  5. MainWidnow odbiera sygnał i aktualizuję serię danych

Generalnie wszystko masz robić na sygnałach i slotach. Jeśli masz repo na github lub bitbucket to podaj linka, może na to popatrzę wieczorem.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-08-10 11:33
0

Znaczy jeżeli to dobrze rozumiem to co opisałeś to jest działanie jak normalnie działa button.
A mi chodzi o to, że klikam przycisk raz i cały czas urządzenie przesyła jakieś dane i okno to cały czas nanosi na wykres, a w dodatku w między czasie mogę klikać sobie inne przyciski, no i oczywiście buttona do przerwania rysowania.
Nie wiem jak to ująć, no może jak jakiś odtwarzacz filmów klikam start i film sobie leci, mogę zmieniać jakieś ustawienia w czasie tego i zatrzymać film. Coś takiego chciałbym umieć zrobić.

Repa jako takiego nie mam, bo na razie się tego uczę i jak coś nowego robię to sobie robię nowy projekt gdzie sobie opisuje dokładnie się dzieje i mam tam kilka linijek kodu, więc to raczej będzie zbędne.
Ale wielkie dzięki za chęci :D

Pozostało 580 znaków

2018-08-10 11:40
0

Zauważ, że punk 3 sam się ponownie uruchamia. Wszystko rozbija się o detale, dlatego proponuje pokazanie repo.

Jak się komunikujesz z urządzeniem?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-08-10 11:40
0

Przez USB.

libusb_control_transfer()
edytowany 2x, ostatnio: furious programming, 2018-08-11 15:12

Pozostało 580 znaków

2018-08-10 11:42
1

Może spróbuj za pomocą klasy QTimer? Wciskając przycisk ustawiasz np timer przez który jest wywoływana jakaś funkcja okresowo.

Pozostało 580 znaków

2018-08-10 11:44
0

Okresowo w senie, że tylko ona np przez 10sek co 0.1s się włącza i okno jest zamrożone, czy przez 10 sek co 0.1 się uruchamia, ale z okna można normalnie korzystać?

Pozostało 580 znaków

2018-08-10 11:45

W sensie, że działa w tle w nieskończoność z częstotliwością jaką sobie ustawisz. Tak z okna można dalej korzystać, ale weź pod uwagę, że jeśli program będzie chodzić na jednym wątku, a częstotliwość ustawisz 100 razy na sekundę, to taka funkcja może się gryźć z innymi

edytowany 3x, ostatnio: Draaz, 2018-08-10 11:48

Pozostało 580 znaków

2018-08-10 11:55
0

Może troszkę konkretniej jak wygląda a komunikacja?
Pokaż kod. Masz to odseparowane do innej klasy?

@Draaz timer? naprawdę?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0