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.
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).
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....