2012-04-06 5 views
5

Chciałbym utworzyć półprzezroczyste okno informacyjne, które nie przeszkadza innym czynnościom użytkownika. Wszelkie kliknięcia okna powinny po prostu przechodzić, tak jakby nie było tam okna.QMainWindow, który ignoruje kliknięcia, przekazuje je do okien tła

Jak poleciłbyś wdrożenie takiego zachowania? Czy istnieje prosty sposób na zrobienie tego lub czy muszę postępować niezręcznie? Zastanawiam się nad ukryciem okna, ponownym uruchomieniem kliknięcia, a następnie ponownym wyświetleniem okna. Ale to wciąż zepsuje gesty drag'n'drop.

+0

Czy zdołałeś kiedyś to wdrożyć? Próbuję wprowadzić to samo. – Kolyunya

Odpowiedz

6

Spójrz na wartość enum z Qt::WidgetAttribute: Qt::WA_TransparentForMouseEvents:

Po włączeniu tego atrybutu wyłącza dostarczanie zdarzeń myszy do widget i jego dzieci. Zdarzenia myszy są dostarczane do innych widżetów , tak jakby widżet i jego dzieci nie były obecne w hierarchii widżetów ; kliknięcia myszy i inne zdarzenia skutecznie "przechodzą poprzez" je. Ten atrybut jest domyślnie wyłączony.

+0

Podoba Ci się [to] (http://i.imgur.com/yGB2Q.png)? Mogę się mylić, ale wygląda na to, że nie działa dla Windows. – Pieter

+0

@Pieter Czy chcesz, aby kliknięcia przechodziły przez półprzezroczyste okno informacyjne do innego okna, które należy do tej samej lub innej aplikacji? – Bill

+0

@Pieter Ważne jest to, że o ile wiem, twoje kliknięcia w półprzezroczyste okno informacyjne posiadające atrybut Qt :: WA_TransparentForMouseEvents są odbierane przez inne okno wtedy i tylko wtedy, gdy to okno należy do tej samej aplikacji Qt. Sprawdziłem źródło Qt, a wspomniany atrybut wpływa na zachowanie 'QWidget * QApplication :: widgetAt (const QPoint & point) [statyczny]', które jest używane wewnętrznie, aby zdecydować, które okno aplikacji otrzyma zdarzenie myszy. – Bill

0

zrobiłem trochę więcej badań nad „przejrzystości zdarzeń myszy” (nie wiem dokładnie terminologii) i znalazłem this.

Nie sądzę, że istnieje ogólne i łatwe podejście do problemu. Prawdopodobnie będziesz musiał zagłębić się w natywny interfejs API. Po dotarciu zdarzeń do aplikacji nie są one przekazywane do innych aplikacji samodzielnie.

Co wy myślicie? Czy jestem skazany na pracę z natywnymi API każdego systemu operacyjnego?

Powiązane problemy