2010-06-07 10 views
7

voglio usare il segnale itemDoubleClicked(QTreeWidgetItem*,int) in un Haskell programma sto scrivendo dove sto utilizzando qtHaskell per la GUI. Per collegare una funzione ho in altri luoghi eseguito le seguenti:Come utilizzare il segnale `itemDoubleClicked (QTreeWidgetItem *, int)` in qtHaskell

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

Dove object è qualche QWidget e signal è una stringa che rappresenta il segnale, ad esempio "triggered()" e f è la funzione che si desidera chiamare quando viene inviato il firmatario. La definizione di connectSlot nella API è:

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

in cui le istanze di Qcs sono:

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()) 

I primi Argomenti passati si suppone essere il QObject di cui io sto usando un segnale. Come potete vedere, non c'è istanza dove f, la funzione per connettersi al segnale, può avere due ulteriori argomenti per ricevere lo QWidget e l'intero inviato dal segnale. C'è un modo per collegare questo segnale a una funzione personalizzata?

+0

qtHaskell è praticamente inutilizzato. Non conosco applicazioni di esempio per questo. Perché non usare gtk2hs o wxHaskell - c'è molta più documentazione. –

+3

Beh, mi piace Qt, e qualcuno deve essere il primo, suppongo. Fino al punto in cui volevo usare quel segnale, funzionava abbastanza bene. Se non ci sono soluzioni suppongo che userò gtk2hs se deve esserlo. – nano

+0

@Don Stewart, in effetti se qualcuno che cerca di usare qtHaskell è consigliato di passare a gtk2hs, qtHaskell rimarrà inutilizzato :) @nano, ti suggerisco di chiedere all'autore, forse lui sarà in grado di aiutarti. –

risposta

1

NOTA: Ho lasciato questa risposta qui solo come documentazione. Il mio suggerimento era basato su un malinteso e in realtà non funziona in questa situazione.


Funzionerebbe chiamare connectSlot con una funzione personalizzata parzialmente applicato, come nel "Signals and Slots" esempio nel qtHaskell primer?

In questo esempio, la funzione di on_hello_clicked è digitare QMessageBox() -> MyQPushButton -> IO(), che sembra corrispondere a ciò che si desidera che il f a guardare come, se non che si desidera un ulteriore argomento Int alla fine.

Gli autori utilizzare questa funzione con connectSlot applicando prima al loro finestra di messaggio:

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

Così, mentre on_hello_clicked non ha un tipo che è un'istanza di Qcs (dal momento che vuole sia una finestra di messaggio e un pulsante), lo fa parzialmente lo on_hello_clicked mb.

+0

Sì, lo sto facendo in altri posti, ma a questo punto non penso che risolverebbe il mio problema, poiché la funzione parzialmente applicata sarebbe il 5.argomento di 'connectSlot' e non sarei ancora in grado di ottenere sia' QWidgetItem' che il numero intero come argomenti per la mia funzione, il che mi direbbe quale elemento di una lista è stato cliccato. A proposito, non sembra funzionare neanche il 'QWidgetItem' e ignorare il numero intero. – nano

Problemi correlati