Qt - dynamicznie dodawanie / wyświetlanie pasków narzędzi QToolBar

Qt - dynamicznie dodawanie / wyświetlanie pasków narzędzi QToolBar
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

W aplikacji mam jeden główny pasek narzędzi i teraz po wybraniu konkretnej akcji z tego paska dodaje 2 pasek QToolBar i wszystko działa prawidłowo tylko nie podoba mi się to że dodatkowy pasek narzędzi automatycznie zmniejsza wysokość centralnego widgetu ( co jest zrozumiałe ). Czy jest możliwość aby ten dodatkowy pasek wyświetlał się nad tym centralnym widgetem bez pomniejszania go o swoją wysokość?

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:14 minut
0

Jest chyba oczywiste, że w takiej sytuacji okno musi przytyć, co nie jest dobrym rozwiązaniem (użytkownik oczekuje, że rozmiar okna nie będzie mu się zmieniał w bez jego życzenia).
Zależnie od wymogów, można np ustalić minimalny rozmiar centralnego widgeta, wtedy system layoutów powinien automatycznie powiększyć okno by spełnić to ograniczenie.
Możesz ręcznie wymusić tycie okna, gdy dodajesz toolbar-a.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

No właśnie jest to oczywiste ale chciałbym to ominąć. W sensie żeby dodatkowy pasek ( on nie koniecznie musi być jako QToolBar może to być widget lub cokolwiek innego ) wyświetlał się nad centralnym widgetem nie zwiększając wielkości głównego okna ani nie zmniejszając centralnego widgetu.
Np facebook ma taki przycisk po lewej / prawej stronie który po naciśnięciu wysuwa zakładkę a ponowne naciśniecie ją zwija. Chciałbym uzyskać to samo tylko że przycisk mam na pasku narzędzi, dam screena.

  • 2.jpg (641 KB) - ściągnięć: 274
  • 1.jpg (555 KB) - ściągnięć: 190
edytowany 1x, ostatnio: emacs
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:14 minut
1

W takim razie musisz wsadzić tego nowego toolbara do central widgeta.
Ja bym dodał jedno piętro (dodatkowego pustego widgeta, albo layouta) w cental widget, którym zawierałby się stary content oraz ten toolbar (możnanapisać własny layout, alekto wie, może QStackedLayout załatwiłby sprawę).
Cała sztuczka polegałaby na nałożeniu na siebie obu zawartości i przesuwaniu toolbara wtedy kiedy jest potrzebny.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

Doszedłem do czegoś takiego jak w załączniku. Gdybym wyświetlał to z lewej / prawej strony to byłoby już ok bo po drodze nie miałbym innych elementów GUI. W moim przypadku ten widget idzie od samego dołu okna i przechodzi nad głównym toolbarem co nie wygląda dobrze. Co mogę zrobić aby wyglądało to tak jakby ten widget wychodził spod tego toolbara?

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:14 minut
1

czyli nie zrobiłeś jak napisałem. Niech toolbar będzie dzieckiem central widgeta, wtedy zostanie przycięty do rozmiaru parenta.

Qt Documentation napisał(a)

A widget is clipped by its parent and by the widgets in front of it.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
EM
Mimo że zaznaczyłem odpowiedź to gdybyś miał chwile to rozpisz mi proszę trochę dokładniej jak miałoby to być umieszczone w tym layoucie i w jaki sposób mógłbym to nakładać tak żeby był efekt wysuwania.
EM
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Postów:271
0

Dziękuje @MarekR22

Niech toolbar będzie dzieckiem central widgeta, wtedy zostanie przycięty do rozmiaru parenta.

To świadczy o tym ile jeszcze nie wiem... A Twój sposób pewnie i był bardzo dobry ale muszę się przyznać że ni jak nie potrafiłem sobie wyobrazić w jaki sposób miałbym nakładać na siebie te widgety. Nie potrafiłem ułożyć tego tak aby toolbar był w centralnym widgecie razem z innym i jednocześnie by był nad tym drugim tak by nie zabierał mu miejsca.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.