2013-02-04 9 views
5

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.

+0

@ BЈовић (Edit): To nie Qt5 specyficzny. Tytuł był mylący. – leemes

+1

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 –

+0

@Roku Wspaniale, dziękuję bardzo. Powinno to być dobre dla Windows. Wciąż szukam rozwiązania, które działa w systemie Linux. – leemes

Odpowiedz

2

podstawie próby samo z Qt4 niedawno, obawiam się, że odpowiedź jest, trzeba dostroić ten per-platforma/per-window-manager. Spodziewam się, że łatki do QWindow poprawią zachowanie w tym obszarze będą akceptowane, ale nie jestem świadomy żadnego standardowego haka, aby powiedzieć OS/menedżerowi okien, co próbujesz osiągnąć.

Równie Qt powinien być nie być „uzyskanie w sposób” rozwiązywania tego, to po prostu obszar, w którym nie może nic, aby pomóc w sposób ogólny zrobić.

Powiązane problemy