W jaki sposób uczynić QWidget (w Qt4 lub Qt5)/QWindow (od Qt5) bez granic, narysuj niestandardowy pasek tytułu i ręcznie implementuj przeciąganie myszy aby przesunąć okno na ekranie, po prostu śledząc pozycję myszy za pomocą jakiegoś mouseMoveEvent
i aktualizując położenie okna.Pasek tytułowy QWidget/QWindow: niestandardowy wygląd, natywna atmosfera (podobna do Chrome)
Jednak ruch ten zachowuje się inaczej niż jako ojczystego jednego realizowanego przez menedżera okien. Na przykład przesunięcie okna w pobliżu granicy ekranu może być interpretowane jako "pełny ekran" lub "podzielony ekran"; lub okna łączą się ze sobą nawzajem, w zależności od menedżera systemu/okna. Te rzeczy nie działają, jeśli zaimplementujesz ruch okna jak powyżej.
Google Chrome/Chromium to tylko jeden z przykładów dla aplikacji, która implementuje niestandardowy pasek tytułowy okna i granicy, przy jednoczesnym dostosowaniu do natywnego zachowanie menedżera okien. Zastanawiam się, czy Chrome sam je implementuje (i wykrywa menedżera okien i jego konfigurację), czy też jest jakaś funkcjonalność w większości menedżerów okien (wyraźnie, to wciąż jest wysoce zależna od platformy), mówiąc "ruch macierzysty okna macierzystego" i "zatrzymaj ruch natywnego okna" lub podobny.
Czy coś takiego możliwe w Qt? Jeśli nie, może używając innych bibliotek, takich jak Qxt?
FYI: Głównie kieruję reklamy na systemy Windows i Linux, w których widzę trudności, jakie może mieć użytkownik dla dowolnego menedżera okien.
@ BЈовић (Edit): To nie Qt5 specyficzny. Tytuł był mylący. – leemes
Czy to pytanie może być istotne dla twojego problemu (przynajmniej w Windows): http://stackoverflow.com/questions/11979278/wm-syscommand-sc-move-eats-up-mouse-events-and-mouse-up- is-not-fired –
@Roku Wspaniale, dziękuję bardzo. Powinno to być dobre dla Windows. Wciąż szukam rozwiązania, które działa w systemie Linux. – leemes