2010-06-07 21 views
7

Quiero usar la señal itemDoubleClicked(QTreeWidgetItem*,int) en un programa Haskell estoy escribiendo donde yo estoy usando qtHaskell para la interfaz gráfica de usuario. Para conectar una función que tengo en otros lugares hecho lo siguiente:Cómo utilizar la señal de `itemDoubleClicked (QTreeWidgetItem *, int)` en qtHaskell

dummyWidget <- myQWidget 
connectSlot object signal dummyWidget "customSlot()" $ f 

Dónde object es un poco de QWidget y signal es una cadena que representa la señal, por ejemplo, "triggered()" y f es la función Quiero ser llamado cuando el signale es enviar. La definición de connectSlot en el API es:

class Qcs x where 
    connectSlot :: QObject a -> String -> QObject b -> String -> x -> IO() 

donde las instancias de Qcs son:

Qcs() 
Qcs (QObject c -> String -> IO()) 
Qcs (QObject c -> Object d -> IO()) 
Qcs (QObject c -> Bool -> IO()) 
Qcs (QObject c -> Int -> IO()) 
Qcs (QObject c -> IO()) 
Qcs (QObject c -> OpenGLVersionFlag -> IO()) 

Los primeros argumentos pasados ​​se supone que es el QObject de los cuales estoy usando una señal. Como se puede ver, no hay ningún caso en el que f, la función de conectarse a la señal, puede tener otros dos argumentos para recibir la QWidget y el entero enviar por la señal. ¿Hay alguna manera de conectar esa señal a una función personalizada?

+0

qtHaskell es más o menos sin utilizar. No conozco aplicaciones de ejemplo para eso. ¿Por qué no usar gtk2hs o wxHaskell? Hay mucha más documentación. –

+3

Bueno, me gusta Qt, y alguien tiene que ser el primero, supongo. Hasta el punto en que quería usar esa señal, funcionó bastante bien. Si no hay solución, supongo que usaré gtk2hs si tiene que ser así. – nano

+0

@Don Stewart, de hecho si alguien que intente usar qtHaskell se le recomienda cambiar a gtk2hs, qtHaskell va a permanecer sin usar :) @nano, le sugiero que le pregunte al autor, quizás él podrá ayudarlo. –

Respuesta

1

NOTA: estoy dejando esta respuesta sólo a modo de documentación. Mi sugerencia se basó en un malentendido y en realidad no funciona en esta situación.


¿Funcionaría llamar connectSlot con una función personalizada aplicado parcialmente, como en el ejemplo "Signals and Slots" en el qtHaskell primer?

En este ejemplo, la función on_hello_clicked tiene tipo QMessageBox() -> MyQPushButton -> IO(), que parece corresponder a lo que usted quiere que su f a ser similar, excepto que desea una Int argumento adicional al final.

Los autores utilizar esta función con connectSlot aplicando en primer lugar a su cuadro de mensaje:

hello <- myQPushButton "Hello qtHaskell World" 
resize hello (200::Int, 60::Int) 
mb <- qMessageBox hello 
connectSlot hello "clicked()" hello "click()" $ on_hello_clicked mb 

Así, mientras on_hello_clicked no tiene un tipo que es una instancia de Qcs (ya que quiere tanto un cuadro de mensaje y un botón), aplica parcialmente on_hello_clicked mb.

+0

Sí, he estado haciendo esto en otros lugares, pero en este momento no creo que resolvería mi problema, ya que la función parcialmente aplicada sería el 5.argumento de 'connectSlot' y aún no sería capaz de obtener tanto' QWidgetItem' como el entero como argumentos para mi función, lo que me diría en qué elemento de una lista se hizo clic. Por cierto, simplemente obtener el 'QWidgetItem' y descartar el entero tampoco parece funcionar. – nano

Cuestiones relacionadas