Qt QScrollArea - zapętlony obszar przewijania

0

Czy w Qt jest coś takiego jak obszar przewijania bez granic z lewej / prawej strony? Chce tam umieścić kilka przycisków i przewijać to na zasadzie że jak dochodzę do ostatniego to za nim automatycznie pojawia się przycisk 1 i tak w kółko? W tej chwili korzystam z QScrollArea z tym że właśnie on przewija to w granicach gdzie 1 i ostatni element są właśnie tymi granicami z lewej i prawej strony.

1

Da się to zrobić, ale zależy to od kilu rzeczy:

  • czy rozmiar QScrolArea się zmienia
  • czy rozmiar scrollowanego widgetu ma się zmieniać
  • czy zawartość scrollowanego widgetu jest dynamiczna

Najprostszy przypadek (odpowiedzi 3*nie), widget z zawartością robisz dłuższy o rozmiar scrollarea powtarzając zawartość tego widgeta o jego początek. Reimplementujesz metodę QWidget::moveEvent i w nim ograniczasz pozycję tego widgetu (jeśli przekracza ona długość okresu, to odejmujesz od pozycji długość tego okresu).

Jeśli gdzieś masz odpowiedź TAK, to trzeba obsłużyć resizeEvent i odpowiednio poprawiać widget z zawartością.

Jeśli masz dynamiczną zawartość to należałoby odpowiednio obsługiwać dodawanie i odejmowanie widgetów (recycling).

0

A czy ma sens coś takiego że mam np 5 buttonów przy czym wyświetlane jednocześnie są tylko 3 i teraz gdy focus osiąga ostatni button to kopiuje / usuwam / przenosze 1button i wstawiam go na ostatnią pozycje? Coś takiego ::

Obieg 1 - gdy focus jest na ostatniej pozycji przenoszę 1button na koniec - |_ ... _| oznaczam elementy widoczne w scrollarea

1button 2button |_ 3button 4button 5button | <-> 2button | 3button 4button 5button _| 1button

Obieg 2 - teraz to 1button jest ostatnią pozycją i ma focusa więc znów przenoszę aktualnie 1 element ( 2button ) na koniec

2button 3button |_ 4button 5 button **1button **| <-> 3button | 4button 5button 1button _| 2button

I tak dalej....

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