2010-10-25 30 views

Respuesta

6

que he estado haciendo algunas investigaciones y aquí es lo que he llegado con:

Un QSystemTrayIcon no puede manejar de forma explícita un lastre/gota evento. Sin embargo, hay una solución basada en el método de ubicación del icono de la bandeja Spifftastic.

  1. Se crea un icono únicamente coloreado y colocarlo como el icono por un breve momento y tomar una captura de pantalla de la misma.
  2. Dado que usted sabe el color secuencia para el icono, puede buscar a través de la pantalla y localizar la ubicación del icono en particular.
  3. Un widget transparente se coloca sobre el icono y se utiliza como el destino de caída .

Todavía tengo que trabajar en algunos de los detalles más finos de la operación, pero esa es la esencia de la misma. Todas las cosas consideran que es una forma estrafalaria, pero dado que no hay otras maneras de hacerlo, creo que es aceptable.

Aplicación Fluffy (escrita en C#) utiliza el método Spifftastic para localizar el icono de la bandeja. Supongo que la parte de la ventana transparente es cómo lo logran, pero todavía tengo que descompilar y examinar su sistema.

1

Dado que QSystemTrayIcon es un QObject, no un QWidget, creo que esto no es posible. El icono de la bandeja del sistema no es realmente propiedad de Qt, sino que se transfiere al "escritorio", es decir, cualquier parte de Gnome/KDE/Windows/Mac que esté dibujando el área relevante. Al menos en Mac, estaría cayendo en la barra de menú, que sería una interfaz de usuario muy extraña. Para Gnome y KDE es un estándar FreeDesktop.org, pero una vez más, no creo que sea su proceso lo que realmente hace el dibujo, y por lo tanto, no hay forma de que Qt obtenga eventos como arrastrar y soltar.