2012-04-06 6 views
5

mi piacerebbe creare una finestra di informazioni semi-trasparente che non ottiene nel modo di altre attività dell'utente. Qualsiasi clic sulla finestra dovrebbe passare come se la finestra non fosse lì.QMainWindow che ignorano scatti, li passa a Windows sfondo

Come suggeriresti di implementare tale comportamento? C'è un modo semplice per farlo o devo seguire una soluzione maldestra? Sto pensando di nascondere la finestra, rieseguire il clic e rendere di nuovo visibile la finestra. Ma questo avrebbe comunque rovinato i gesti di drag'n'drop.

+0

Sei mai riuscito a implementarlo? Sto cercando di implementare lo stesso. – Kolyunya

risposta

6

Date un'occhiata a un valore di enumerazione di Qt::WidgetAttribute: Qt::WA_TransparentForMouseEvents:

Quando abilitato, questo attributo disabilita la consegna di eventi del mouse per il widget e suoi figli. Gli eventi del mouse vengono consegnati ad altri widget come se il widget e i relativi figli non fossero presenti nella gerarchia di widget ; i clic del mouse e altri eventi in modo efficace "passano tramite" loro ". Questo attributo è disabilitato per impostazione predefinita.

+0

Come [questo] (http://i.imgur.com/yGB2Q.png)? Potrei sbagliarmi, ma non sembra funzionare per Windows. – Pieter

+0

@Pieter Desideri che i tuoi clic passino attraverso la finestra delle informazioni semi-trasparenti in un'altra finestra che appartiene alla stessa o ad un'altra applicazione? – Bill

+0

@Pieter Ciò che è importante qui è che, per quanto so, i tuoi clic sulla finestra di informazioni semitrasparenti con l'attributo Qt :: WA_TransparentForMouseEvents sono ricevuti da un'altra finestra se e solo se quella finestra appartiene alla stessa applicazione Qt. Ho controllato il sorgente Qt e l'attributo citato influenza il comportamento di 'QWidget * QApplication :: widgetAt (const QPoint & point) [statico]' che viene utilizzato internamente per decidere quale finestra dell'applicazione ottiene l'evento del mouse. – Bill

0

ho fatto un po 'di più la ricerca di "trasparenza evento del mouse" (non conoscere la terminologia esatta) e ho trovato this.

Non penso che ci sia un approccio generale e facile al problema. Probabilmente dovrai scavare nell'API nativa. Una volta che gli eventi raggiungono un'applicazione, non vengono inoltrati ad altre applicazioni da soli.

Cosa ne pensate? Sono condannato a lavorare con le API native di ciascun sistema operativo?

Problemi correlati