[C++, Qt] Rysowanie bez odświeżania

0

Jak w temacie, zależy mi na wielokrotnym rysowaniu prostych figur geometrycznych. Załóżmy, że mam naprzykład slot, który rysuje okrąg w losowym miejscu podpięty do sygnału kliknięcia na jakimś butonie. Teraz chce żeby każde kliknięcie domalowywało pojedynczy okrąg, ale nie niszcząc tych wcześniej narysowanych.
Oczywiście możnaby to samemu implementować ręcznie odrysowywując np. zawartosć jakiejś listy do której stopniowo dodajemy nasze okręgi, ale to strasznie brzydkie i wydaje mi się że idzie to zrobić bez tego używając wsparcia Qt.

Próbowałem na kilka sposobów:

  • Przez QPaintera i paintEvent(QPaintEvent *event), ale każdorazowe wywołanie paintEvent "kasuje" to co zostało już narysowane. Z kolei użycie save(), restore() nie pomaga bo to pamięta tylko stan pisaków, podobnie z PainterPath.

  • Przez Q3Canvas, tu też jest źle bo podobnie jak powyżej każde wywołanie metody rysującej rysuje "od nowa". Swoją drogą jeśli wyrzuce obiekt Q3Canvas z metody na zewnątrz i uczynie polem klasy
    (czyli nie będzie niszczenia po narysowaniu) to w ogóle nie chce nic rysować.

Jakieś pomysły :>?

0

Problem polega na tym, że źle rozumujesz jak to działa (w każdym freamworku jest tak samo).
zdarzenie paint jest wywoływane za każdym razem, kiedy komponent ma być odmalowany z jakiegoś powodu.
Wtedy paint powinno odrysować całą zawartość od początku.
Utwórz QPixmap o odpowiednim rozmiarze rysuj na tej QPixmap'ie, a w zdarzeniu paint rysuj zawartość tej QPixmap'y.

0

Dzięki Marek, podziałało :-)

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